-
Notifications
You must be signed in to change notification settings - Fork 9
Branding ru
Ваша панель может забрендировать SlothClash под вас — название и логотип, акцентный цвет, ваши ссылки, счётчики трафика и устройств — просто добавив несколько HTTP-заголовков к ответу на подписку. Никаких отдельных сборок и своего приложения: обычный публичный SlothClash подхватит их при следующем обновлении подписки.
Ничего не запрашивается дополнительно. Клиент читает эти заголовки из того же запроса, которым и так качает конфиг, поэтому брендинг не стоит вашей панели ни одного лишнего обращения.
Без этого заголовка не применяется ничего:
X-Brand-Desktop-Enabled: true
Два жёстких правила:
-
Только HTTPS. На обычном
http://заголовки игнорируются полностью. - Убрали переключатель — брендинг исчез. При следующем обновлении клиент чистит кэш и возвращается к стоковому виду. Так брендинг и выключается — снимать все заголовки не нужно.
Значения можно оборачивать в кавычки (некоторые панели их добавляют) — клиент снимает один слой. Некорректные значения отбрасываются по отдельности: неправильный цвет никогда не обнулит ваши ссылки.
| Заголовок | Значение |
|---|---|
X-Brand-Desktop-Name |
Название оператора, ≤ 64 символов. Показывается кнопкой в шапке приложения |
X-Brand-Desktop-Tagline |
Короткая строка под названием, ≤ 128 |
X-Brand-Desktop-Accent-Color |
#rrggbb или #rgb. Перекрашивает весь интерфейс |
X-Brand-Desktop-Logo-URL |
Картинка по https://. Кэшируется на диск (≤ 512 КБ), при отрисовке заново не качается |
X-Brand-Desktop-Logo-Light-URL |
Вариант для светлой темы |
X-Brand-Desktop-User-Display-Name |
Имя/логин пользователя, ≤ 96. UTF-8 работает (кириллица, эмодзи) |
X-Brand-Desktop-Greeting |
Приветствие рядом с именем, ≤ 160 |
Акцентный цвет не может сломать читаемость. Клиент проверяет контраст с активной темой и при необходимости подправляет оттенок. А если пользователь выбрал свой акцент в настройках — останется его выбор, он всегда важнее вашего.
Открываются в системном браузере. Принимаются только https:// и tg://, остальное отбрасывается.
| Заголовок | Подпись в интерфейсе |
|---|---|
X-Brand-Desktop-Cabinet-URL |
Кабинет |
X-Brand-Desktop-Renew-URL |
Продлить |
X-Brand-Desktop-Support-URL |
Поддержка |
X-Brand-Desktop-Telegram-URL |
Telegram |
X-Brand-Desktop-Bot-URL |
Бот |
X-Brand-Desktop-Website-URL |
Сайт |
X-Brand-Desktop-Status-URL |
Статус |
X-Brand-Desktop-Help-URL |
Справка |
X-Brand-Desktop-Privacy-URL |
Конфиденциальность |
X-Brand-Desktop-Terms-URL |
Условия |
Присылайте только то, что есть — пустые просто не рисуются. Кабинет и Продлить идут первыми, потому что ради них это окно обычно и открывают.
X-Brand-Desktop-Devices-Used: 3
X-Brand-Desktop-Devices-Limit: 5
Показывается как 3 / 5 рядом с трафиком и сроком, а при достижении лимита подсвечивается — ровно там, где пользователь собирается вам написать. Пришлёте только Used — покажется просто число.
Стандартного заголовка для этого не существует (Subscription-Userinfo несёт только трафик и срок), поэтому поле живёт в нашем неймспейсе.
Трафик и срок берутся из стандартного
Subscription-Userinfo— если вы его уже отдаёте, они появятся сами, брендинг для этого не нужен.
X-Brand-Desktop-Hide-Global-Mode: true
X-Brand-Desktop-Hide-Proxy-Mode: true
X-Brand-Desktop-Hide-Local-Configs: true
X-Brand-Desktop-Hide-Advanced: true
- Hide-Global-Mode — убирает опцию Global; сам переключатель режима остаётся и показывает Rule.
- Hide-Proxy-Mode — убирает опцию Proxy, остаётся только TUN.
- Hide-Local-Configs — прячет импорт локальных конфигов, остаётся импорт по ссылке.
- Hide-Advanced — убирает страницу Advanced из бокового меню.
Это упрощение интерфейса, а не средство защиты. Сами функции никуда не деваются, и пользователь в любой момент может переключиться на другой профиль.
По устройству клиента вам доступно ровно три вещи: скрыть некритичные элементы интерфейса, задать акцентный цвет, добавить свою идентичность и ссылки.
Брендинг никогда не сможет тронуть безопасность соединения, DNS, kill switch, механизм обновлений или спрятать страницы Settings и Logs. Эта граница проведена намеренно: пользователь всегда должен видеть, что делает приложение, и иметь возможность обратиться за помощью.
nginx на том, что отдаёт подписку:
location /sub/ {
add_header X-Brand-Desktop-Enabled "true" always;
add_header X-Brand-Desktop-Name "ExampleVPN" always;
add_header X-Brand-Desktop-Accent-Color "#3d7eff" always;
add_header X-Brand-Desktop-Logo-URL "https://example.com/logo.png" always;
add_header X-Brand-Desktop-Cabinet-URL "https://example.com/account" always;
add_header X-Brand-Desktop-Renew-URL "https://example.com/renew" always;
add_header X-Brand-Desktop-Support-URL "https://t.me/example_support" always;
add_header X-Brand-Desktop-Devices-Used "3" always;
add_header X-Brand-Desktop-Devices-Limit "5" always;
add_header X-Brand-Desktop-Hide-Global-Mode "true" always;
}Панели с настройкой произвольных заголовков ответа (Remnawave, PasarGuard, семейство Marzban) принимают те же пары ключ/значение — персональные вроде Devices-Used обычно подставляются из карточки пользователя.
- Обновите подписку в приложении (или переподключитесь).
- В шапке приложения появится кнопка с вашим названием, слева от Добавить подписку.
- По клику открывается окно оператора со ссылками, трафиком, сроком и слотами устройств.
Если ничего не изменилось: подписка должна быть по https://, значение переключателя — ровно true, и заголовки должны пережить ваш CDN/прокси — некоторые вырезают неизвестные X--заголовки.
Android-клиент использует ту же грамматику, но в отдельном неймспейсе — X-Brand-* с переключателем X-Branding-Enabled. Неймспейсы намеренно не пересекаются, чтобы брендинг одной платформы никогда не перекрашивал другую; чтобы забрендировать обе — присылайте оба набора.
📖 User Guide
- Getting Started
- Profiles & Nodes
- Routing & Rules
- Settings
- Deep Links
- Encrypted Subscriptions
- Troubleshooting
📺 Companion
🏢 For Operators