mHub
Открытая платформа · Addon Protocol v2 · Browser API

Любая идея. Любой экран.

Собери радиоприложение за один вечер.

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

Работает в Vypn и в любом браузере mHub Открытый код, MIT Без сборки, без аккаунта Работает на телефонах, телевизорах и компьютерах
Vuma на телевизоре: избранная передача DW над рядами документальных фильмов и видео о бизнесе, вверху каталоги аддона.
Vuma, приложение mHub, на телевизоре. Всё на этом экране берётся из одного аддона: DW.
Идея

Одна платформа, три части.

mHub не одно приложение, а три части, которые подходят друг к другу, и все они открыты. Две из них служат фундаментом: формат контента и Browser API. Третья часть состоит из приложений, и каждое из них опирается на один фундамент или на оба.

01

Приложения

То, чем ты на самом деле пользуешься. Vuma превращает аддоны в один экран для просмотра, а другие приложения доносят каждое свою идею до всех экранов в доме. Все они веб-приложения: ничего не нужно устанавливать. Смотреть приложения

02

Контент: аддоны

Аддон служит источником контента: фильмы, радиостанции, подкасты, курсы. Технически это папка с небольшими текстовыми файлами на любом веб-хостинге, описанная в Addon Protocol v2. ИИ может написать его за тебя. Смотреть протокол

03

Возможности: window.mhub

Открой обычный сайт внутри приложения mHub, и он сможет то, чего браузер никогда не позволяет: читать данные откуда угодно, пережить отключение домена, жить на твоём телевизоре. Одно пространство имён, один тег script: mHub Browser API. Смотреть API

Часть первая · Приложения

Наши любимцы. И все уже работают.

Vuma опирается на оба фундамента; приложения рядом с ней показывают, как далеко может завести один фундамент. Пять приложений, пять разных идей, и с каждого из них можно начать.

Vuma

Дай Vuma аддоны, и она превратит их в один экран для просмотра: все каталоги твоих аддонов, поиск сразу по всем, библиотека и плеер, который продолжает с того же места. Это одно веб-приложение, которое одинаково работает на телефонах, телевизорах и компьютерах и само справляется с касаниями, пультом и мышью.

Она стоит на обоих фундаментах: аддоны приносят контент, а внутри браузера mHub Browser API добавляет возможности, которых у обычной страницы нет. Её даже можно встроить в собственную страницу, с твоими аддонами и твоим названием: один HTML-файл.

Vuma на телефоне: избранная передача DW с описанием и кнопками «Мой список» над рядом телеканалов в прямом эфире.
Аддон DW в Vuma на телефоне: главное новостное видео и прокручиваемый список роликов.

Waves

Радиостанции, подкасты и бесплатные аудиокниги в одном приложении. Waves сделан одним HTML-файлом поверх той же сборки Vuma: пять аудиоаддонов, бирюзовый акцент и addonManager: "fixed", так что источники заданы заранее, а пользователь только включает и выключает их. Открой исходный код страницы: она сама по себе и есть весь урок.

Waves: подкаст на главном баннере над рядами радиостанций SomaFM, с бирюзовым логотипом-волной на боковой панели.
Waves: SomaFM, Radio Browser, подкасты и аудиокниги, бирюзовым по тёмному. Один HTML-файл на Vuma.

Junior

Детское телевидение. Один аддон, яркие цвета, немецкий язык с первого экрана (locale: "de") и addonManager: "hidden": с дивана в настройках ничего не сломаешь. Тоже один HTML-файл поверх сборки Vuma.

Junior: мультфильм KiKA на главном баннере над рядами детских передач, на немецком, с жёлтой звездой-логотипом на боковой панели.
Junior: аддон KiKA и больше ничего, со звездой на двери.

Mediathek

Аддон отвечает за данные, а то, что кто-то строит поверх него, становится приложением. Mediathek сделан одним HTML-файлом прямо на аддоне ard-mediathek, без Vuma внизу: ряды, поиск, сериалы с эпизодами, субтитры и плеер, который помнит, где ты остановился. Аддон загружает данные, страница отвечает за внешний вид.

Mediathek: ряды видео и сериалов ARD с названиями, датами и длительностью, и поле поиска.
Mediathek, один HTML-файл поверх одного аддона, без собственного хостинга.

Glance

Второй фундамент сам по себе: Glance вообще не использует аддоны. Один HTML-файл на Browser API, который собирает на одном спокойном экране погоду, заголовки новостей, биржевые цены и состояние твоих собственных серверов. В обычном браузере он аккуратно обходится без лишнего; внутри приложения mHub оживает каждая плитка.

Glance: часы, погода, биржевые цены и заголовки новостей спокойными плитками на одном экране.
Glance, один HTML-файл с живой погодой, заголовками и ценами.
Что можно собрать

Одна идея, одна папка, любой экран.

Всё, где есть список, может стать аддоном, а всё, что браузер делать отказывается, может стать сайтом внутри mHub. Это идеи, которые мы хотели бы увидеть воплощёнными, и до каждой всего один промпт: выбери любую, и она попадёт в промпт для ИИ ниже.

Аддон: папка JSON-файлов, размещённая где угодно или на mhub.mx Сайт: одна веб-страница на Browser API Приложение: Vuma с твоими аддонами и твоим названием

Смотреть

Аддон

Твой региональный телеканал

Всё, что телеканал выкладывает в сеть, рядами по передачам, вечерние новости первыми.

Аддон

Кинофестиваль

Программа с трейлерами и аннотациями, по дням, площадкам и секциям.

Аддон

Немое кино

Фильмы из общественного достояния из Internet Archive, по десятилетиям и режиссёрам.

Аддон

Твой спортивный клуб

Лучшие моменты, полные записи матчей и расписание сезона в виде живого каталога.

Аддон

Веб-камеры города

Публичные веб-камеры одного города, гавань, площадь, гора, как каналы в прямом эфире.

Аддон

Заседания горсовета

Записи и трансляции заседаний твоего городского совета, по заседаниям и пунктам повестки.

Слушать

Аддон

Твои радиостанции

Те десять станций, которые ты действительно слушаешь, с логотипами, в удобном тебе порядке.

Аддон

Одна сеть подкастов

Все шоу одной сети из их RSS-лент, новые выпуски первыми.

Аддон

Аудиокниги одного автора

Записи LibriVox одного автора, главы как эпизоды, с продолжением с того же места.

Аддон

Сказки на ночь

Короткие аудиосказки для детей, со спокойной обложкой у каждой и без рекламы.

Аддон

Религиозная община

Службы и беседы твоей церкви, мечети или общины, в прямом эфире и в записи.

Приложение

Собственное приложение радиостанции

Waves с потоками и подкастами одной станции и её собственными цветами. Один HTML-файл.

Учиться

Аддон

Лекции одного университета

Открытые записи лекций по факультетам и семестрам, на телевизоре вместо ноутбука.

Аддон

Языковой курс

Уроки как эпизоды, по порядку, с аудиоупражнениями рядом с видео.

Аддон

Экскурсии по музею

Видео- и аудиогиды музея, зал за залом.

Аддон

Кулинарная школа

Видеорецепты по типу блюда и кухне, с ингредиентами в описании.

Сайт

Браузер архива

Дружелюбный интерфейс для Archive.org или Project Gutenberg: листай, ищи и читай, как в приложении.

Аддон

Доклады одной конференции

Все записанные доклады серии конференций, по годам и секциям.

Дом и семья

Сайт

Семейный экран

Погода, заголовки и цены на то, что тебе важно, на одном спокойном экране. Этот мы уже сделали: это Glance.

Сайт

Панель управления домом

Свет, NAS, принтер, роутер. Браузеры отказываются делать такие локальные запросы; приложение mHub делает их за тебя.

Сайт

Стена камер

Твои собственные камеры из локальной сети, сеткой на телевизоре.

Аддон

Семейная фоторамка

Фотографии с твоего собственного сервера в виде каталога изображений: телевизор становится рамкой.

Приложение

Детское ТВ

Один аддон, яркие цвета, с дивана в настройках ничего не сломаешь. Это Junior.

Аддон

Мультфильмы одного канала

Бесплатные серии одного детского канала, по передачам, их спокойно можно дать ребёнку.

Инструменты

Сайт

Читалка новостей

Загружай любую ленту прямо из источника. Обычные браузеры это блокируют; внутри mHub это просто работает, и читать удобно прямо с дивана.

Сайт

Слежение за ценами

Проверяй цены и наличие в магазинах, веди список отслеживания, смотри результат на любом экране.

Сайт

Панель статуса серверов

Твои собственные машины, их диски и сервисы в виде плиток, которые краснеют раньше, чем кто-нибудь позвонит.

Аддон

Канал YouTube через резолвер

Аддон-резолвер: вставь канал и получи его видео в виде каталога, который воспроизводится.

Аддон

Субтитры на одном языке

Аддон субтитров для одного языка, который отвечает на imdb id, из открытого источника субтитров.

Аддон

Где посмотреть фильм

Введи название фильма и узнай, где его можно посмотреть в твоей стране. Аддон элементов поверх открытой базы данных.

Уже есть что-то из этого? Опубликуй на mhub.mx: мы проверим, разместим под твоим именем и покажем в репозитории сообщества.

Часть первая · Сделай Vuma своей

Твоё собственное приложение умещается в один HTML-файл.

Waves и Junior устроены именно так: загрузи сборку Vuma, дай ей элемент, вызови mount. Этот файл на любом статическом хостинге уже становится готовым приложением с твоими аддонами, твоим названием и твоими цветами, и он сам подхватывает новые релизы Vuma. Без сборки, без серверного кода, без аккаунта.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport"
  content="width=device-width, initial-scale=1.0, viewport-fit=cover, user-scalable=no">
<title>My App</title>
<link rel="stylesheet" href="https://vuma.mx/latest/style.css">
</head>
<body>
<div id="app"></div>
<script type="module">
  import { mount } from "https://vuma.mx/latest/app.js";
  mount({
    addons: [
      "https://www.mhub.mx/radio-and-podcasts",
      "https://www.mhub.mx/public-domain",
    ],
    brand: { name: "My App", colors: { accent: "#00AAFF" } },
  });
</script>
</body>
</html>

Аддон задаётся URL своего манифеста. Размещённые здесь аддоны перечислены в каталоге аддонов, а новый тебе может собрать ИИ.

Все параметры mount и то, откуда берутся файлы, описаны в самом приложении: Как сделать своё приложение. Инструкция поставляется вместе со сборкой, поэтому описывает ту версию, которую ты собираешься загрузить, а не ту, для которой писалась эта страница.

Часть вторая · Addon Protocol v2

Аддон: папка JSON-файлов.

Аддон служит источником контента: фильмы, радиостанции, подкасты, рецепты, курсы. Положи папку в любое место в интернете, добавь её адрес в приложении, и всё её содержимое появится там, готовое к просмотру. Второй версии протокола сервер не нужен: каждый эндпоинт может быть статическим файлом на любом CDN. Все существующие аддоны v1 продолжают работать; приложения переводят между двумя версиями, и поддержка v1 сохраняется.

Статика прежде всего

Все эндпоинты работают через GET, все кэшируются, и все можно разместить как обычные файлы. Один необязательный POST для системы задач.

/mhub-addon.json
/catalog/{type}/{catalogId}.json
/item/{type}/{id}.json
/source/{type}/{id}.json

Модульность

Каталоги, сведения об элементах, источники, резолверы и субтитры являются отдельными ресурсами. Один аддон может предоставлять их все или только один.

"resources": ["catalog",
  "item", "source",
  "resolve", "subtitle"]

Задачи на стороне клиента

Эндпоинт может ответить задачей вместо данных. Приложение делает запрос с IP самого пользователя, поэтому статический аддон работает и с API, закрытыми по географии.

// аддон остаётся статическим,
// запрос делает клиент

mhub-addon.json

Минимальный аддон состоит из одного манифеста и одного файла каталога. Загрузи оба на любой статический хостинг, и всё работает. Спецификация написана на OpenAPI 3.1, к ней есть сгенерированные типы TypeScript и клиентская библиотека без зависимостей, всё под лицензией MIT, на GitHub.

{ "id": "my-movies", "name": "My Movies", "specVersion": 2,
  "resources": ["catalog"], "types": ["video"],
  "catalogs": [{ "id": "all", "name": "All", "type": "video" }] }
Часть вторая · Собери с ИИ

Опиши. ИИ соберёт.

Весь формат аддонов умещается в один промпт, и тебе не придётся его читать. Скопируй промпт, добавь свою идею, и ИИ ответит папкой с файлами. Загрузи их куда угодно, и твой аддон заработает.

01

Скопируй промпт

Он направляет ИИ к спецификации. Работает с любым ассистентом, который умеет открывать ссылки, например ChatGPT или Claude.

02

Добавь свою идею

«Мои любимые радиостанции». «Все фильмы одного режиссёра». «Открытые лекции моего университета». Всё, где есть список.

03

Загрузи файлы

Подойдёт любой статический хостинг, GitHub Pages бесплатен. Добавь адрес в приложении mHub и открой свой собственный аддон.

Прочитай спецификацию mHub Addon Protocol v2 по адресу
https://raw.githubusercontent.com/mediahubmx/protocol/main/openapi.yaml
и собери для меня аддон. Аддон представляет собой папку статических JSON-файлов,
готовых к загрузке на любой веб-хостинг. В ответе приведи каждый файл: его полный путь,
а затем полное содержимое.

Мой аддон: [опиши здесь свою идею]

Если твой ассистент не умеет открывать ссылки, вставь файл спецификации прямо в чат. Спецификация и полные примеры аддонов лежат на GitHub.

Часть третья · mHub Browser API

Что может твой сайт внутри mHub

Всё находится в одном пространстве имён: window.mhub, и каждый хост предоставляет полное ядро. Один раз проверь, есть ли пространство имён, а дальше просто вызывай. Без SDK, без сборки, без аккаунта: вся настройка сводится к одному тегу script, и его можно разместить у себя.

<script src="https://mhub.mx/mhub.js"></script>
Проверяем этот браузер…
Хост
…
Устройство
…
Возможности
…

API уже работает в приложениях и выходит вместе с их релизами. Пиши под него уже сегодня, и твоя страница будет работать в любом случае: где хоста нет, window.mhub просто отсутствует, и твой сайт остаётся обычным сайтом. Получить браузер с этим API.

mhub.fetch

Загружай что угодно. Без ограничений CORS и с заголовками запроса, которые браузер обычно оставляет за собой.

// с другого домена, и ответ можно прочитать
const r = await mhub.fetch(url);

mhub.openStream

Некоторым медиа для воспроизведения нужны собственные заголовки запроса. Один вызов, и хост сам выберет правильный путь на любой платформе.

const s = await mhub.openStream(
  { url, headers });
video.src = s.url;

mhub.storage

Хранилище ключ/значение, привязанное к твоему сайту, а не к домену, на котором он сейчас работает. Без запросов разрешения, без настройки.

await mhub.storage.set(k, v);

mhub-site.json

Один домен упал, а твой сайт всё равно загружается. Размести один маленький файл на каждом домене; браузер найдёт его, проверит твои зеркала и сам переключится. Без кода.

{ "id": "mysite",
  "endpoints": [
    "https://a.example",
    "https://b.example" ] }

mhub.setLinks

Плитка на домашнем экране браузера. Путь обратно к твоему сайту, который сохраняется между визитами.

mhub.setLinks([
  { id, name, icon, url }]);

mhub.setSearch

Адресная строка становится поиском по твоему сайту. Запросы и подсказки идут прямо на твою страницу.

mhub.setSearch({ placeholder,
  onQuery, onSuggest });

mhub.device + capabilities

Узнай, где запущена страница и что умеет хост, от телефона до телевизора, ещё до первой отрисовки.

if (mhub.device.isTV) tvUi();

…и объявления приложения

Страница, которая работает как приложение, сообщает хосту, что берёт на себя: собственную навигацию назад (setBackHandler), полноэкранный плеер (setImmersive) и выход (exit); мета-тег в HTML говорит, что это приложение, сделанное для пульта. Все члены API, модель разрешений и система зеркал описаны в справочнике API.

mhub.setBackHandler(depth);
mhub.setImmersive(true);
<meta name="mhub" content="app dpad">
Сообщество

Опубликовано такими же людьми, как ты.

Уже 56 аддонов сообщества от 31 автора. Войди по email, загрузи папку в zip-архиве или дай ссылку на папку на своём хостинге, и после проверки аддон будет жить по адресу mhub.mx/@you/addon, в списке сообщества и в репозитории сообщества.

Создай что-нибудь. Большое или маленькое.

Справочник API описывает все члены, модель разрешений и систему зеркал. Спецификация протокола поставляется с полными примерами аддонов, которые можно скопировать.