Перейти к содержимому
Эта страница переведена автоматически с английского. Сообщите об ошибке или предложите исправление.

Id катушек и QR-ссылки

Ратифицировано 2026-11-05 — пока не реализовано. Приложения строятся на этом контракте. Открытые вопросы перечислены в конце; решение любого из них меняет только то, что в нём названо. Разделы с пометкой Предложено ещё не ратифицированы: не стройте на них ничего, пока они не будут ратифицированы.

Публичный эталон: репозиторий TigerQR-Label содержит спецификации ссылок и этикеток этого контракта (spec/links.md, spec/labels.md), тестовые векторы (test-vectors/links.json), эталонный код, который выполняет qr.tigertag.io (src/parse.ts, src/links.ts), и девять примеров этикеток. Документация — CC-BY-4.0, код — Apache-2.0. Проверяйте считыватель на тестовых векторах.

QR-код TigerTag содержит одну короткую ссылку, https://qr.tigertag.io/<path>. Путь говорит, что она открывает:

flowchart TD
  QR["QR scanned<br/>qr.tigertag.io/#lt;path#gt;"]
  QR -- "/#lt;14 hex#gt;" --> CHIP["Spool with a chip<br/>TigerTag / TigerTag+"]
  QR -- "/#lt;10 or 17 digits#gt;" --> DATA["Spool without a chip<br/>TigerData / TigerData+"]
  QR -- "/p/#lt;10 digits#gt;" --> PROD["Catalogue product, public<br/>page · .json · .ttag"]
  CHIP --> OWNER{"Spool: is the owner<br/>signed in?"}
  DATA --> OWNER
  OWNER -- "yes" --> SPOOL["Their spool<br/>page · .json · .ttag"]
  OWNER -- "no" --> OTHER["The product and the owner's name<br/>.json / .ttag: 303 to /p/"]
  classDef private fill:#f08c0022,stroke:#f08c00,stroke-width:2px
  classDef public fill:#2f9e4422,stroke:#2f9e44,stroke-width:2px
  class CHIP,DATA,OWNER,SPOOL private
  class PROD,OTHER public

Оранжевым отмечено личное, только для владельца катушки; зелёным — общедоступное.

QR-код на Путь Пример
катушке с чипом (TigerTag / TigerTag+) UID чипа в шестнадцатеричном виде, 14 символов, печатается строчными буквами; UID парного чипа открывает ту же катушку qr.tigertag.io/1d33dbda0d1080
катушке без чипа (TigerData / TigerData+) id без префикса TigerData_: 10 или 17 цифр; длинная форма (TigerData_6130922252, tigerdata-…) тоже работает qr.tigertag.io/6130922252
продукте (TigerQR+) p/ + id_product в десятичном виде, всегда 10 цифр, дополненный нулями (p/0010303748); старые этикетки с 8 шестнадцатеричными символами (p/9f5e0644) по-прежнему открываются qr.tigertag.io/p/2673739332
  • Ссылка на катушку: владелец, войдя в аккаунт, видит свою катушку; все остальные видят продукт и имя владельца. .json и .ttag отдают катушку только владельцу; остальные получают 303 на .json / .ttag продукта.
  • Ссылка на продукт общедоступна, без входа: страница каталога, его данные (p/2673739332.json) и файл (p/2673739332.ttag).
  • Регистр букв в ссылках не важен.
  • Чтобы поделиться катушкой или продуктом, делитесь этой короткой ссылкой: именно она печатается на этикетках, и её читает любое приложение. Ссылка, которой делятся, может начинаться с языка (qr.tigertag.io/fr/p/2673739332): тогда страница открывается на этом языке для всех. На печатных этикетках его никогда нет.

Остальная часть страницы — сам контракт.

Правила, которым следует каждое приложение TigerSystem:

  1. как катушка без чипа (TigerData / TigerData+) получает свой id;
  2. как катушка сохраняет свою ссылку, когда получает чип;
  3. как id катушки записывается в QR-код печатной этикетки и считывается обратно;
  4. как приложение вызывает катушку со значениями (вес, заметка) через ссылку;
  5. как продукт получает собственную ссылку;
  6. как ссылка отвечает в JSON или файлом .ttag.
  7. что несёт печатная этикетка и каковы её шаблоны.

Катушка — это документ в инвентаре аккаунта, users/{uid}/inventory/{spoolId}. Id документа и есть id катушки: в одном аккаунте не может быть двух катушек с одинаковым id.

Катушка Id Пример
Чип (TigerTag / TigerTag+) NFC UID чипа, шестнадцатеричный, в верхнем регистре, 14 символов (7-байтовый UID NTAG) 04AB12CD3E4F80
Без чипа, выдаётся с этого момента TigerData_ + миллисекунды epoch (13 цифр) + случайное число 0000–9999 (всегда 4 цифры) TigerData_17623456789014213
Без чипа, выдан до этого контракта TigerData_ + 10 случайных цифр TigerData_4480517985
Без чипа, устаревший префикс CLOUD_ + 10 случайных цифр CLOUD_4480517985
Устаревший десятичный (старое Android-приложение) UID в десятичной записи, переводится в шестнадцатеричный 1234567890123456

Уже выданные id этим контрактом никогда не переписываются. Считыватели проверяют только префикс (TigerData_ / CLOUD_ → без чипа); ни один из них не зависит от числа цифр. Id — это идентификатор, и ничего больше: никогда не выводите из него дату создания. 4-байтовый UID (проприетарный чип, привязанный к катушке) никогда не бывает именем документа инвентаря, поэтому никогда не появляется в ссылке.

Каждое приложение, создающее катушки без чипа (сегодня Tiger Studio, позже мобильное приложение), выдаёт id одинаково:

  1. Составить TigerData_<Date.now()><four random digits>.
  2. Локальная проверка — если id уже есть в инвентаре, который хранит приложение (копия живого слушателя, включая офлайн-кэш), или в его uidMigrationMap, составьте другой. Это работает офлайн.
  3. Записать
    • онлайн: в транзакции, которая сначала читает документ и завершается ошибкой, если он существует; при ошибке вернитесь к шагу 1;
    • офлайн: обычная запись, которую Firestore ставит в очередь до возвращения сети. Шаги 1 и 2 — единственная защита.

Обычный set() для уже существующего id перезаписывает находящуюся там катушку, молча. Именно это предотвращает шаг 3.

Четыре случайные цифры также делают новый id без чипа практически уникальным во всех аккаунтах (примерно одна коллизия за 600 лет при миллионе катушек без чипа в год), так что сервер позже сможет разрешить ссылку для кого-то, кроме владельца, не меняя ни одной напечатанной этикетки.

2. Сохранение ссылки, когда катушка получает чип

Заголовок раздела «2. Сохранение ссылки, когда катушка получает чип»

Программирование чипа на катушке без чипа переносит катушку на UID чипа. В одном пакете:

  1. записать катушку под UID чипа (и под UID двойника — для пары двойников);
  2. удалить документ TigerData_…;
  3. записать перенаправление users/{uid}/uidMigrationMap/{old id} → { hex_uid, migrated_at }.

Пакет гарантирует, что все три действия происходят вместе или не происходят вовсе. Перенаправление хранится в uidMigrationMap (коллекции, которая уже сопоставляет устаревшие десятичные id с шестнадцатеричными), а не в виде документа-заглушки в инвентаре: всё, что читает инвентарь, считает один документ одной катушкой.

Печатная этикетка катушки несёт QR-код со ссылкой на катушку — и больше ничего (ни веса, ни заметки: напечатанные значения устаревают):

https://qr.tigertag.io/<id>

Рядом с кодом ничего не печатается открытым текстом: ни id, ни ссылка. QR-код — это путь обратно к катушке.

<id> — это id катушки без префикса:

Катушка Ссылка
Чип https://qr.tigertag.io/04ab12cd3e4f80
Без чипа (новая) https://qr.tigertag.io/17623456789014213
Без чипа (до этого контракта) https://qr.tigertag.io/4480517985
CLOUD_ без QR-ссылки — этикетка печатается без QR-кода
Устаревший десятичный без QR-ссылки — сначала переведите катушку в шестнадцатеричный формат
  • Вся ссылка — в нижнем регистре, включая id: https://qr.tigertag.io/04ab12cd3e4f80. Проверено 2026-11-07: камера iPhone открывает ссылку в любом регистре, но камера Samsung (Galaxy S24) показывает ссылку HTTPS:// в верхнем регистре как обычный текст и открывает только ссылку в нижнем.
  • Один сегмент в байтовом режиме. Схема в нижнем регистре не может использовать буквенно-цифровой режим, а разбиение ссылки на сегменты ничего не экономит (измерено: каждый вариант — 29 × 29).
  • Коррекция ошибок M (15 %): этикетки царапаются и сгибаются.
  • Итог: 29 × 29 модулей для каждой ссылки на катушку и на продукт. Рисуйте каждый модуль на целом числе точек принтера, со стандартной свободной зоной в 4 модуля.

Считыватели извлекают id из ссылки офлайн: приложению, сканирующему этикетку, сайт никогда не нужен. Они читают путь без учёта регистра, игнорируют завершающий / и разрешают его по форме:

Путь Id катушки
17 цифр TigerData_<17 digits>
10 цифр TigerData_<10 digits>
14 шестнадцатеричных символов UID в верхнем регистре
13 шестнадцатеричных символов, начинающихся с 4 усечённый UID NTAG: 0 + 13 символов (правило исправления)
p/ + id_product: 10 десятичных цифр (печатная форма) или 8 шестнадцатеричных символов (старые этикетки) продукт — раздел 5

Окончание .JSON или .TTAG запрашивает ответ для инструментов — раздел 6.

Приложения записывают короткую форму выше, но считыватели принимают и длинную форму: префикс TigerData в любом регистре, затем _ или -, затем 17 или 10 цифр — TigerData_17623456789014213, TigerData-17623456789014213, TIGERDATA-17623456789014213, tigerdata_4480517985 ведут к одной и той же катушке. Ссылка, набранная или отправленная вручную, продолжает работать. Префикс CLOUD не принимается ни в одной из форм.

UID может состоять только из цифр, но его длина — 14 символов, никогда не 17 и не 10, так что всегда решает длина. Ни один устаревший десятичный id не доходит до считывателя, поскольку ни один не печатается. Любая другая форма — это этикетка из более новой версии: считыватель сообщает об этом («обновите приложение»), а не выдаёт ошибку. Каждый другой вид объектов получает собственную папку — букву и / (p/ для продукта, позже r/ для стеллажа), — так что он никогда не пересечётся с уже напечатанными ссылками на катушки.

Ссылка, которой делятся, может нести перед путём язык того, кто ею делится. (2026-11-11.)

https://qr.tigertag.io/<lang>/<spool id>
https://qr.tigertag.io/<lang>/p/<id_product>

<lang> — один из en, fr, de, es, it, zh, pt, pt-pt, pl, ru, nl, пишется строчными буквами, читается в любом регистре.

  • Тогда страница открывается на этом языке для всех, включая роботов предпросмотра ссылок: /fr/p/2673739332 → tigersystem.io/fr/catalog/2673739332.
  • Без префикса решает язык браузера посетителя.
  • Неизвестный префикс даёт 404.
  • На печатных этикетках префикса нет никогда: они остаются нейтральными по языку. Его добавляют только кнопки «Поделиться» (tigersystem.io и Tiger Studio).

Считыватели его отбрасывают. Считыватель, которому передают ссылку (поле вставки в Studio, сканер или поле вставки мобильного приложения, любой сторонний считыватель), сначала отбрасывает один начальный <lang>/ в любом регистре, а затем читает остаток, как описано выше: qr.tigertag.io/fr/p/2673739332 открывает тот же продукт, что и qr.tigertag.io/p/2673739332. Считыватель никогда не печатает и не сохраняет префикс: этикетка или экспорт, сделанные по ссылке, которой поделились, несут ссылку без префикса. Ссылка, которой делятся, — qr.tigertag.io/fr/p/2673739332; QR-код всегда содержит qr.tigertag.io/p/2673739332. (2026-11-11.)

  1. Найдите id в собственном инвентаре вошедшего зрителя.

  2. Нет там → найдите его в uidMigrationMap зрителя и пройдите по перенаправлению.

  3. У пары двойников одна этикетка, с основным UID; любой из двух UID открывает катушку.

  4. Удалённая катушка (deleted: true) открывается как «удалённая», а не как ошибка.

    Владелец видит катушку на самой странице — она читается в браузере из его собственного документа инвентаря (правила ограничивают доступ им самим): продукт (фото на его цвете), бренд, материал, уровень, оставшийся вес от ёмкости, температуры сопла, стола и сушки, диаметр, стеллаж и слот, вес пустой катушки. Две кнопки: «Open in Tiger Studio» (https://studio.tigersystem.io/?spool=<docId>, со значениями из ссылки) и «See the product page». Владелец, вошедший на устройстве в Studio Web, но не на сайт, отправляется в Studio Web: сайт не может прочитать документ без собственной сессии. (2026-11-07.) Владелец может изменить там вес и заметку той же записью, что и Studio: weight_available или message (не более 28 байт UTF-8), updatedAt (время сервера), needUpdateAt (время сервера) для формата с чипом, двойник — в том же пакете. Там же можно изменить контейнер (пустую катушку), так, как его записывает Studio: container_id, container_weight (с собственной поправкой аккаунта), updatedAt, двойник — в том же пакете. На странице есть кнопка выхода. (2026-11-08.)

  5. Любой, кто не является владельцем, — не вошедший, другой аккаунт, включая принятого друга, — отправляется к продукту катушки, и катушка ему никогда не показывается: сервер находит катушку по её id во всех аккаунтах (индекс по id катушки), читает её id_product и перенаправляет на ссылку продукта из раздела 5. Один и тот же id в двух аккаунтах с разными продуктами (перезаписанный чип, старый документ которого сохранил другой аккаунт) → продукт документа, обновлённого последним (updatedAt), — верно практически в любом случае. Нет продукта или нет совпадения → страница, сообщающая, что катушка приватная, с «Start my inventory». Поиск выполняется только для этих сканирований, так что его стоимость следует за ними, а не за числом аккаунтов. (Ратифицировано 2026-11-06; правило конфликтов — 2026-11-07.)

    Посетитель без сессии (на устройстве не найден вход) не перенаправляется: страница даёт ему выбор. Она показывает карточку продукта катушки (только публичный продукт, никогда — для приватной катушки), выполняет вход прямо на месте (после входа проверка владельца запускается снова, и владелец попадает на катушку) или ведёт дальше, на страницу продукта. Вошедший пользователь, который не является владельцем, отправляется к продукту, как описано выше. (2026-11-07.)

    Чья это катушка. Любой, кто сканирует катушку, вошедший или нет, видит её владельца: отображаемое имя и фото из userProfiles аккаунта, чей документ был обновлён последним, даже если профиль не публичный, и даже для катушки без продукта, чтобы тот, кто найдёт катушку, знал, кому она принадлежит. Никогда — uid или адрес электронной почты. (2026-11-08.)

Конфиденциальность: знание id никогда не показывает катушку. Отсканированная ссылка открывает катушку только для её владельца; внутри приложений катушка показывается только тому, кому правила Firestore уже разрешают её читать (владельцу, принятому другу, публичному инвентарю). Id содержат метку времени и могут быть угаданы; это никогда не должно иметь значения. Продукт катушки не является приватным: он напечатан на этикетке, а чип TigerTag+ несёт его открытым текстом для любого телефона с NFC. Вес, заметка и стеллаж никогда не покидают аккаунт; владелец показывается только отображаемым именем и фото (см. выше). Сканирование учитывается один раз на вкладку браузера и катушку (перезагрузка — не новое сканирование), с его продуктом, брендом, материалом и местоположением на уровне города, но никогда с id катушки. Отчёт о сканировании также содержит IP-адрес посетителя, который хранится для защиты от флуда и для анализа: он показывается только в истории администратора, никогда — брендам, и используется для проверки города, переданного edge. Он хранится один год, только в целях безопасности. Сканирование вошедшим посетителем привязывается к его аккаунту.

Приложение может построить ссылку, которая открывает катушку и предлагает значения, с помощью обычных параметров запроса (эти ссылки никогда не печатаются, поэтому читаемость важнее размера QR):

https://qr.tigertag.io/04AB12CD3E4F80?weight=640&note=Opened%20in%20June
Параметр Значение Ограничение
weight вес нетто филамента, в граммах целое число, от 0 до ёмкости катушки
note заметка катушки (поле message) простой текст, не более 28 байт UTF-8 (место на чипе)

Имена не зависят от регистра. Неизвестный параметр игнорируется и никогда не считается ошибкой. Значение вне ограничения отклоняется. Новые параметры добавляются в эту таблицу и никогда не придумываются одним приложением в одиночку.

Ситуация Что происходит
Не вошёл Значения отклоняются. Ссылка предлагает войти, а затем открывает катушку без них.
Вошёл, не владелец (включая катушку друга) Значения отклоняются. Катушка открывается, если это разрешают правила.
Вошёл, владелец Studio: катушка открывается со значениями, заполненными заранее, и одно действие сохраняет их («Update: 640 g»). Страница Hub: вес, который укладывается в ёмкость и отличается от сохранённого, сохраняется сразу — на катушке и её двойнике одним пакетом, — после чего баннер предлагает вернуть прежний вес («Revert to 772 g») на случай повторного сканирования старой ссылки. (Hub, 2026-11-08.)

Ссылка от кого-то другого никогда не записывает: значения применяются только к собственной катушке владельца. Приложение, которому нужно записывать без подтверждения (весы, постоянно обновляющие вес, интеграция), не использует ссылки: оно записывает через аккаунт пользователя по правилам Firestore (руководство по интеграции).

Ратифицировано 2026-11-06.

У продукта — филамента из каталога, чья бы катушка с ним ни была, — есть собственная ссылка: для упаковки, полки магазина, шоурума или печатного каталога:

https://qr.tigertag.io/p/<id_product>
  • <id_product> записывается в десятичном виде, всегда 10 цифрами, с нулями впереди: id_product никогда не длиннее 10 цифр (наибольший — 4294967295). Примеры: продукт 2855882328 → https://qr.tigertag.io/p/2855882328; продукт 10303748 → https://qr.tigertag.io/p/0010303748. 29 × 29 модулей.
  • Этикетки, напечатанные раньше, несут прежнюю форму — id_product в виде 8 строчных шестнадцатеричных символов (p/aa394e58); она остаётся читаемой навсегда (см. ниже).
  • Id, которого нет или больше нет в каталоге, — p/0000000000 и p/4294967295 («нет продукта», никогда не печатаются), неизвестный id, продукт в архиве, удалённый или объединённый, — открывает одну-единственную страницу «забытого продукта»: этого филамента больше нет в каталоге, с поиском. Один статус для всех, 404 (и для страницы, и для ответов .json / .ttag): почему продукт исчез, читающему неважно. id_product никогда не присваивается другому продукту: уже наклеенная этикетка никогда не откроет не тот филамент.
  • Ссылки обслуживает Hub (tigersystem.io): qr.tigertag.io указывает на него. Страница — это страница каталога Hub (ниже); ответы .JSON и .TTAG — маршруты API Hub, которые читают каталог (с кэшированием).
  • Этикетка катушки никогда не повторяет свой продукт: ссылка на катушку уже ведёт к нему (раздел 3).

Правильно сформированная ссылка на продукт имеет одну из двух длин, поэтому её невозможно прочитать неверно:

  1. 10 цифр → десятичное (p/2673739332, p/0010303748).
  2. 8 символов 0-9 / a-f → шестнадцатеричное, прежняя печатная форма, по-прежнему принимается (p/9f5e0644 открывает тот же продукт, что и p/2673739332).

В качестве допуска, без гарантии, десятичное число другой длины, набранное вручную, читается как десятичное, кроме ровно 8 цифр: они читаются сначала как шестнадцатеричное, затем как десятичное, если такого продукта нет. Значение больше 4294967295 — неизвестная ссылка. 0 и 4294967295 в любой форме означают «нет продукта» (404). Окончания .json и .ttag работают в любой форме, без учёта регистра.

p/… перенаправляет (302) на существующую страницу каталога продукта, tigersystem.io/<lang>/catalog/<id_product in decimal>, на языке ссылки (языковой префикс), а без него — на языке телефона. Отдельной страницы сканирования нет: страница каталога построена в первую очередь для телефона (адаптивная), так как большинство её посещений приходят со сканирования, — фото и образец цвета, бренд, материал и название цвета вверху, параметры печати читаются с одного взгляда, затем — остальная страница.

Ратифицировано 2026-11-06.

Ссылка, оканчивающаяся на .JSON (в любом регистре), — или отправленная с Accept: application/json — отвечает в JSON вместо страницы. Ссылка, оканчивающаяся на .TTAG, отвечает той же записью в виде файла .ttag для скачивания (Content-Disposition: attachment). Это адреса для инструментов, они никогда не печатаются.

Та же логика, что и при сканировании (поиск катушки): владелец получает катушку, все остальные — её продукт.

Ссылка Владелец (Authorization: Bearer <Firebase ID token>) Все остальные (не вошедший, другой аккаунт, друг)
…/p/2855882328.json запись продукта то же самое
…/p/2855882328.ttag продукт в виде файла .ttag то же самое
…/04ab12cd3e4f80.json катушка 303 → …/p/<id_product>.json; нет продукта из каталога (TigerData, TigerTag мейкера) → 404
…/04ab12cd3e4f80.ttag катушка в виде файла .ttag 303 → …/p/<id_product>.ttag; нет продукта из каталога → 404

Без продукта из каталога о катушке не отдаётся ничего, даже её материал: 404 соответствует странице «приватной катушки» при сканировании.

  • Катушка: файл .ttag с этой единственной записью — документом инвентаря в том виде, в каком его хранит Firestore. Он содержит id_product; инструмент, которому нужен продукт, затем вызывает …/p/<id_product>.json.
  • Продукт: запись каталога в том виде, в каком её возвращает API продуктов, на языке из ?lang= (по умолчанию английский). Кэшируется на сервере и разрешена с любого сайта.
  • Ответ по катушке никогда не кэшируется: он зависит от того, кто спрашивает.
  • При открытии в Tiger Studio .ttag катушки импортируется в режиме Restore (катушка в прежнем виде, включая чип и резервную копию); .ttag продукта импортируется в режиме Import, как новый TigerData+ с новым id.
  • Запрос JSON или .TTAG никогда не записывает: значения из ссылки (?weight=, ?note=) там игнорируются.

Все приложения печатают одинаковые этикетки: два вида, один набор шаблонов, чтобы этикетка, напечатанная из Tiger Studio, мобильного приложения или сайта, выглядела и сканировалась одинаково.

Этикетка Её QR-код Печатается для
Катушка ссылка на катушку (раздел 3) любой катушки, у которой есть QR-ссылка (не CLOUD_, не устаревший десятичный)
Продукт (карточка-образец) ссылка на продукт (раздел 5) катушки или продукта из каталога с реальным id_product (TigerTag+, TigerData+)

Владелец, сканирующий этикетку катушки, получает катушку; все остальные — её продукт (поиск катушки). Этикетка продукта открывает продукт для всех: это этикетка для образца, полки или шоурума.

  • бренд — там, где был бы логотип производителя (логотипы производителей появятся позже);
  • серию белым по чёрной плашке (PLA Rainbow; материал, если серии нет);
  • название цвета и его hex-код(ы) (#F2D066, до трёх на широких шаблонах);
  • на этикетке катушки — название этикетки в правом верхнем углу, контурной «таблеткой»: TigerQR+, если её привязка — продукт из каталога (реальный id_product) или чип TigerTag+, иначе TigerQR (так что чип TigerTag без продукта даёт TigerQR); этикетка продукта (филамента) всегда несёт TigerQR+. Как у TigerTag и TigerTag+, + означает привязку к каталогу. «Таблетка» не говорит, есть ли у катушки чип;
  • до четырёх полей значений, которые пользователь выбирает из: диапазона сопла, диапазона стола, сушки (температура · время), TD, диаметра;
  • QR-код.

Только то, что не меняется: никогда — остаток веса, заметка, стеллаж или владелец. Ничего открытым текстом рядом с QR-кодом (раздел 3).

Девять шаблонов — распространённые размеры и макеты этикеток катушек:

Шаблон Размер (ширина × высота) Макет
Classic (по умолчанию) 40 × 30 mm бренд, плашка, цвет + hex, четыре поля, QR внизу справа
Wide 50 × 30 mm Classic с более широкой плашкой
Compact 40 × 25 mm бренд, QR слева, плашка, цвет, hex — без полей
Slim 40 × 12 mm QR слева, бренд, плашка, цвет — без полей
Slicer-friendly 40 × 30 mm бренд, серия, цвет крупно друг под другом, большой QR справа — без полей
Vertical 30 × 40 mm бренд, плашка, цвет крупно, hex, линия, поля стопкой слева, QR внизу справа
Vertical bold 30 × 40 mm бренд, плашка во всю ширину, цвет, линия, QR по центру снизу — без полей
Vertical compact 25 × 40 mm бренд, плашка, цвет, hex, линия, большой QR снизу — без полей
Только QR 25 × 30 mm «таблетка» TigerQR / TigerQR+ по центру сверху, под ней QR 20 мм — больше ничего, без полей

Каждый шаблон — один SVG, размеченный в десятых долях миллиметра и масштабируемый под точки принтера. QR-код заполняет ту же область, что и на распространённых этикетках катушек (≈ 14 mm на Classic), с целым числом точек принтера на модуль: ближайшим, округлённым вверх, если это остаётся в пределах 6 % области. Белые поля этикетки служат её свободной зоной. При 203 dpi код 29 × 29 на Classic — это 4 точки на модуль (≈ 14,5 mm).

  • PDF, PNG (в разрешении принтера) и SVG, чтобы работал любой принтер — при необходимости через его собственное приложение;
  • прямая печать на принтерах этикеток (Brother QL, Niimbot, Phomemo) появится позже, принтер за принтером, с теми же шаблонами.
  • чтобы их попробовать, playground TigerQR делает этикетку TigerQR+ продукта из каталога в каждом шаблоне, в PNG (203 или 300 dpi) и SVG.
  • Ссылки приложений. iOS (apple-app-site-association) и Android (фильтры intent) по умолчанию сопоставляют пути с учётом регистра: ссылки печатаются в нижнем регистре, но набранная или отправленная вручную ссылка может быть другой, поэтому мобильное приложение объявляет сопоставление без учёта регистра (iOS) и фильтрует путь в коде (Android).
  • Домен. qr.tigertag.io печатается навсегда: продлевайте tigertag.io на долгий срок.

См. также: Универсальная идентичность филамента, Инвентарь и облачная синхронизация, Обзор для разработчиков