Wallify — Create your own live wallpapers! Официальный открытый каталог живых обоев для Android-приложения Wallify от Rooni (@RnPlugins).
Каждый разработчик может выложить свои интерактивные живые обои на HTML5 / CSS3 / JavaScript / Canvas в каталог приложения.
Important
📖 Полное техническое руководство разработчика обоев (WALLPAPER_API.md) Движок, метаданные, события, локальный HTTP-сервер, палитра Material You, хранилище настроек — всё описано там. Этот файл рассказывает только про устройство каталога.
Комплект обоев — это независимый HTML5-проект с файлом manifest.json. Все комплекты лежат в папке wallpapers/, а корневой index.json — единственный индекс, откуда приложение Wallify берёт список обоев, версии, описания и ссылки на архивы.
Wallify-Repo/
├── index.json # Индекс каталога — его читает приложение
├── wallpapers/
│ └── my-cool-wallpaper/
│ ├── manifest.json # Метаданные комплекта
│ ├── index.html # Точка входа
│ ├── README.md # Показывается на странице комплекта
│ ├── cover.png # Баннер карточки, рекомендуется 16:9
│ ├── icon.png # Квадратная иконка, рекомендуется 1:1
│ └── settings/
│ └── index.html # (Опционально) страница настроек
└── scripts/
├── validate_catalog.py # Проверка каталога, её же гоняет CI
└── make_covers.py # Генератор обложек-заглушек
Этот файл генерирует GitHub Actions из папок wallpapers/*/ и их manifest.json.
Авторам PR редактировать его не нужно. Одна запись — один комплект.
{
"version": 1,
"updatedAt": "2026-07-26T23:45:00Z",
"wallpapers": [
{
"id": "my-cool-wallpaper",
"name": "My Cool Wallpaper",
"author": "Nickname",
"version": "1.0.0",
"description": "Короткое описание для карточки в каталоге.",
"path": "wallpapers/my-cool-wallpaper",
"main": "index.html",
"useGyroscope": false,
"isLite": true,
"cover": "cover.png",
"icon": "icon.png",
"createdAt": "2026-07-26T00:00:00Z",
"updatedAt": "2026-07-26T00:00:00Z",
"downloadUrl": "https://github.com/YouRooni/Wallify-Repo/releases/download/bundles/my-cool-wallpaper.zip"
}
]
}| Поле | Обязательно | Описание |
|---|---|---|
id |
да | Уникальный идентификатор: строчные латинские буквы, цифры, дефис. Совпадает с именем папки |
name |
да | Название. По нему приложение сопоставляет установленные обои с каталогом, поэтому оно обязано совпадать с name в манифесте |
author |
да | Автор, совпадает с манифестом |
version |
да | MAJOR.MINOR.PATCH, совпадает с манифестом. По ней определяется наличие обновления |
description |
да | Краткое описание для карточки |
path |
да | Путь к папке комплекта: wallpapers/<id> |
main |
нет | Точка входа, по умолчанию index.html |
useGyroscope |
нет | Должно совпадать с манифестом, иначе сенсор не зарегистрируется |
isLite |
нет | Пометка «энергоэффективные», влияет на фильтр в каталоге |
cover |
нет | Баннер комплекта. Если icon отсутствует, cover также используется как иконка |
icon |
нет | Квадратная иконка. Если cover отсутствует, icon также используется как баннер |
createdAt / updatedAt |
нет | ISO 8601. Без них сортировка «Сначала новые» превращается в порядок строк файла |
downloadUrl |
генерируется | Стабильная ссылка на ZIP в релизе bundles |
Поля stars больше нет: приложение показывает настоящие счётчики скачиваний из GitHub
Releases, сопоставляя их с именем файла из downloadUrl. В старых записях оно игнорируется.
Если ссылки нет, приложение может забрать из репозитория только main и manifest.json. Комплект со страницей настроек, обложкой, шрифтами или отдельными скриптами приедет на устройство неполным — например, кнопка настроек в карточке просто не появится.
Архивы и ссылки собираются автоматически: воркфлоу package-bundles.yml после merge пакует каждую папку в ZIP, обновляет постоянный релиз bundles и генерирует ссылку:
https://github.com/YouRooni/Wallify-Repo/releases/download/bundles/<id>.zip
{
"name": "My Cool Wallpaper",
"description": "Короткое описание для карточки в каталоге.",
"author": "Nickname",
"version": "1.0.0",
"minAppVersion": ">=1.0.0",
"cover": "cover.png",
"icon": "icon.png",
"main": "index.html",
"settingsPath": "settings/index.html",
"useGyroscope": false,
"isLite": false
}Поля name, author, version и useGyroscope обязаны совпадать с записью в index.json — CI это проверяет. Подробное описание каждого поля — в WALLPAPER_API.md, раздел 3.
Движок отдаёт странице объект window.WallpaperEngine и события wallpaperEngineReady, wallpaperUpdate, wallpaperGyroscope, wallpaperOffset, wallpaperPause, wallpaperResume и другие.
Полное описание с примерами — WALLPAPER_API.md. Дублировать его здесь мы не будем: два описания одного API разъедутся на первом же изменении движка.
Warning
Про WebGL. По умолчанию страница растеризуется процессором. DOM, CSS-анимации, 2D-канвас и SVG работают надёжно, а вот WebGL, backdrop-filter и mix-blend-mode идут через композитор и могут не попасть в кадр — вплоть до чёрного экрана на части прошивок. Если строите обои на WebGL, обязательно проверьте их на реальном устройстве и предусмотрите запасной вариант. Подробности — в разделе 12 руководства.
- Сделайте Fork репозитория.
- Положите комплект в
wallpapers/<id>/.index.jsonтрогать не нужно. - Прогоните проверку локально:
python3 scripts/generate_index.py
python3 scripts/validate_catalog.py- Отправьте Pull Request.
Полный список требований и частые ошибки — в CONTRIBUTING.md.
Код каталога и документация — под MIT. Авторские права на каждый комплект остаются за его автором; отправляя PR, автор публикует свои обои на условиях MIT, чтобы приложение и пользователи могли их скачивать и устанавливать.
- Telegram-канал: @RnPlugins
- Разработчик: rooni.dev