Показать HN: RomM — ROM-менеджер и проигрыватель с открытым исходным кодом, размещаемый на собственном сервере ( github.com/rommapp ). RomM — это размещаемое на собственном сервере приложение, позволяющее управлять файлами ретро-игр (ROM) и воспроизводить их в браузере.
Подумайте об этом как о Plex или Jellyfin для вашей библиотеки ROM: он автоматически извлекает метаданные, иллюстрации и информацию об игре из онлайн-источников метаданных, чтобы превратить ваши папки в просматриваемую коллекцию.
Вы можете играть в игры прямо в браузере для таких консолей, как N64, Game Boy Advance, Nintendo DS и PlayStation 1, используя встроенный веб-эмулятор ( https://emulatorjs.org/ ). Участники сообщества выпустили интеграции для Playnite (Windows), muOS (карманные компьютеры Anbernic) и Decky Loader (Steam Deck), и многие другие находятся в разработке.
Команда работает над RomM уже чуть больше двух лет, и мы невероятно гордимся тем, что мы создали на данный момент. За проектом не стоит компания, просто группа друзей, которые вместе создают то, чего мы давно хотели. И, конечно, код имеет открытый исходный код и лицензию AGPLv3.
Посмотрите (довольно медленную) демоверсию, работающую на сверхдешевом VPS: https://demo.romm.app/

bogwog 5 часов назад | следующий [–] Однажды у меня возникла идея, но не было ни времени, ни мотивации воплотить ее в жизнь: база данных игрового дизайна со ссылками на фрагменты игрового процесса.
Так, например, статья о «2D-платформере», в которой обсуждается реализация в Super Mario, включает кнопку «демо», которая запускает веб-эмулятор с сохраненным состоянием, демонстрирующим определенный прыжковый раздел игры.
Возможно, это и опасно с юридической точки зрения, хотя мой неюридический мозг видит в этом добросовестное использование, особенно если эмулятор не позволяет играть в полную версию игры. Не знаю, но это было бы уникальной вещью в Интернете.
Редактировать: это, кстати, потрясающе, я определенно скоро создам личный экземпляр 
Арелиус 4 минуты назад | родитель | следующий [–] > Возможно, это опасно с юридической точки зрения, хотя мой неюридический мозг видит в этом добросовестное использование, особенно если эмулятор не позволяет играть в полную версию игры. Не знаю, но это было бы уникальной вещью в Интернете.
IANAL, но я думаю, что многие люди не понимают, что “добросовестное использование” – это защита. Что по сути означает, что вы должны быть готовы отстаивать свои права в суде. Многие потенциальные случаи добросовестного использования аннулируются еще до того, как доходят до этого.
Это также тест на равновесие, то есть он во многом зависит от фактов и контекста и является субъективным, в результате чего во многих случаях вы действительно не узнаете наверняка, пока не доберетесь до суда. 
гасси 5 часов назад | родитель | предыдущий | следующий [–] Крутая идея, это был бы забавный POC или проект на выходные. Команда EmulatorJS (
https://emulatorjs.org/ ) сделала до смешного простой инъекцию плеера в статический веб-сайт (или несколько плееров с помощью iframes) с предустановленной игрой и пользовательскими настройками.
M95D 57 минут назад | предыдущая | следующая [–] Извлечение чего-либо из интернета означает, что какое-то облако знает, в какие игры я играю. Это риск конфиденциальности. Игры, в которые я играю, очень показательны для типа личности и, вероятно, для множества другой индивидуальной информации, а это значит, что соблазн собрать эти данные и продать их рекламодателям очень велик.
гасси 1 минуту назад | родитель | следующий [–] Какое удачное время! В наш следующий релиз войдет новый, локальный “API”, который использует GamesDB от Launchbox (
https://gamesdb.launchbox-app.com/ ) в качестве источника метаданных. Вся база данных загружается в Redis, а игры сопоставляются по точным именам файлов, поэтому никакие данные никогда не отправляются ни одному облачному провайдеру.
https://github.com/rommapp/romm/pull/1515 
doubled112 51 минута назад | родитель | предыдущий | следующий [–] Это необязательно. Если вы не настроите интеграцию, он не будет ничего получать из интернета.
Хотя без обложки он выглядит гораздо менее впечатляюще. 
трубы 32 минуты назад | предыдущая | следующая [–] Выглядит прекрасно. Спасибо за создание этого.
Если у вас есть время:
Запускает ли он (или может ли) эмуляторы нативно? Я пытаюсь разобраться с эмулятором js, как это libretro? Скомпилирован ли libretro в wasm?
Работает ли он на базе Retro Arch или вам удалось реализовать API Libretro?
Я люблю и ненавижу Retroarch. Его меню смешны, но это все равно проще, чем управлять несколькими эмуляторами. 
гасси 5 минут назад | родитель | следующий [–] Проект, который поддерживает эмулятор в браузере, — EmulatorJS, который использует ядра RetroArch libretro, скомпилированные в WASM. Подробнее о процессе здесь:
https://emulatorjs.org/docs4devs/buildingraw
Я думаю, что это RetroArch, так как когда вы загружаете поврежденный файл или запускаете без выбора игры, отображается меню RA. Если вы хотите копнуть глубже, вы можете проверить их github или спросить в их Discord, с командой было замечательно работать. 
dawnerd 1 час назад | предыдущая | следующая [–] Я использую его в основном как способ упорядочить свои копии игр GOG. Я мог бы использовать приложение GOG, но смысл полностью офлайн-копий в том, чтобы они не находились под контролем людей, у которых вы их купили.
Ромм тоже отлично подходит для этой цели. 
отрава 5 часов назад | предыдущая | следующая [–] RomM — отличный проект! Я так рад, что интеграции будут.
Как человек, который установил много маленьких ретробоксов, идея сделать это один раз и подать свою коллекцию из домашней лаборатории на все мои другие устройства невероятно привлекательна. Веб-эмуляция прошла очень долгий путь. Тем не менее, я предпочитаю играть на своих индивидуальных устройствах, многие из которых не имеют хорошей поддержки браузера.
Настройка каждой из этих систем может занять часы, но возможность указать что-то вроде экземпляра Batocera или настройки ES-DE на сервере и заставить его самостоятельно заполниться ромами, файлами BIOS, снимками экрана и т. д. была бы мечтой. Похоже, что это может быть будущим экосистемы эмуляции, и это звучит потрясающе! 
гасси 5 часов назад | родитель | следующий [–] Мне нравится ваше видение и энтузиазм! Кажется, у вас уже есть надежная настройка и отличный вариант использования для будущей версии RomM.
зунк 3 часа назад | предыдущая | следующая [–] Это может быть глупый вопрос. Но можно ли создать общую папку импорта, куда вы просто сбрасываете ROM, а приложение его идентифицирует и перемещает в нужную системную папку?
Я установил это на своем экземпляре unRAID и пока не разобрался с этим. 
гасси 2 часа назад | родитель | следующий [–] Это пока невозможно, вы можете загрузить ROM из веб-интерфейса (кнопка на панели навигации), но вам нужно выбрать платформу, к которой он принадлежит. Когда мы реализуем сопоставление на основе хэша с Hasheous (
https://hasheous.org/ ), вы сможете загрузить кучу ROM или поместить их в папку импорта, а те, которые будут обнаружены правильно, будут перемещены в папки «правильной» платформы.
asmor 2 часа назад | родитель | предыдущий | следующий [–] Я использую igir для этого. Хотя настройка требует немного усилий.
(Совет профессионала: используйте шаблонный токен {datName} вместо –dir-dat-name, если вы используете clean с отдельными файлами DAT, иначе правило «удалять только из затронутых папок» не применяется, проверено на собственном горьком опыте). 
roger_ 4 часа назад | предыдущая | следующая [–] Отслеживаю это уже некоторое время, и для того, чтобы называться «менеджером ПЗУ», ему действительно нужна поддержка переименования и проверки ПЗУ (например, с помощью файлов .dat).
гасси 4 часа назад | родитель | следующий [–] Согласен на 1000%, и мы планируем сделать именно это с Hasheous (
https://hasheous.org/ ), “бесплатным сервисом, который сопоставляет MD5 или SHA1 хэши ROM и цифровых игр с поставщиками метаданных”. Существует облачная версия, размещенная создателем проекта, или вы можете запустить свой собственный экземпляр и получить файлы .DAT.
roger_ 3 часа назад | корень | родитель | следующий [–] Отлично, жду с нетерпением!
Раньше я пользовался RomCenter и другими инструментами, и мне бы хотелось увидеть подобную комплексную функциональность в чем-то более современном. 
papercrane 3 часа назад | родитель | предыдущий | следующий [–] Ваш комментарий вызвал у меня интерес, так как для меня это была бы необходимая функция, чтобы использовать что-то подобное.
Похоже, они поддерживают интеграцию с инструментом Igir для проверки и именования ПЗУ с использованием файлов DAT.
https://docs.romm.app/latest/Tools/Igir-Collection-Manager/ 
гасси 2 часа назад | корень | родитель | следующий [–] Igir великолепен! Мы спонсируем их последние несколько месяцев, так как многие из наших пользователей считают его полезным. На обоих концах есть документация, чтобы заставить его выводить структуру папок, совместимую с приложением
https://docs.romm.app/latest/Tools/Igir-Collection-Manager/ | https://igir.io/usage/desktop/romm/# 
sumtechguy 3 часа назад | корень | родитель | предыдущий | следующий [–] Надо покопаться и посмотреть, обрабатывает ли он элементы retool. К сожалению, retool был в основном заброшен. IGIR выглядел интересно, пока я не понял, что он не может делать parent/clone для redump, как retool.
papercrane 1 час назад | корень | родитель | следующий [–] Похоже, он поддерживает 1G1R с опцией –single и может вывести информацию о родителе/клоне, если она не указана, как в случае с redump DAT. Вы также можете использовать retool для создания DAT с этой информацией на основе ваших предпочтений, но, как вы сказали, это, вероятно, нежизнеспособно в долгосрочной перспективе, поскольку retool больше не поддерживается.
https://igir.io/dats/processing/#parentclone-inference 
sumtechguy 1 час назад | корень | родитель | следующий [–] Да. Основная проблема в том, что у redump нет родительского клона. У некоторых MAME он есть, у retool в настоящее время в основном статическая версия. Вывод имени в порядке для некоторых из них, потому что они просто в основном одно и то же имя, но разные регионы. Другие на родном языке или просто совершенно другие имена, но одна и та же игра. Затем есть TOSEC. Это монстр, с которым я пытался разобраться, что делать, и у него такие же проблемы, как у redump. No-intro и MAME довольно хороши с его метаданными отношений. У двух других не очень. На некоторых веб-сайтах он есть для определенных систем, но это не очень крутой ход, чтобы их вычищать. Одной из классных частей, которая мне понравилась в retool, была его часть компиляции, где могло быть три игры, и это было в других «игровых» штуках, таких как «5 в 1». Вот где p/c разваливается.
VonGuard 4 часа назад | предыдущая | следующая [–] Использую это уже некоторое время. Он быстро развивается, и команда, стоящая за ним, очень отзывчива и увлечена. Очень рад видеть, как он развивается со временем! Единственное, что ему действительно нужно для продвижения вперед, — это больше ядер Retroarch, портированных на JavaScript, но это проблема upstream.
гасси 4 часа назад | родитель | следующий [–] Мы только что добавили поддержку Doom и Amstract CPC в сегодняшнем патче! Он уже некоторое время доступен в upstream, поэтому нам просто пришлось его включить. Скоро выйдет новое обновление для EmulatorJS (сейчас оно находится в стадии бета-тестирования), и я думал о выпуске пользовательского образа с ночной/бета-сборкой для тестирования…
zurdi 4 часа назад | родитель | предыдущий | следующий [–] Спасибо за добрые слова! И да, эмуляция — это больше работа команды emulatorjs, они тоже отлично справляются
haolez 3 часа назад | предыдущая | следующая [–] Было бы очень круто, если бы это стало приложением для смарт-ТВ. Это не так уж и далеко, правда?
гасси 2 часа назад | родитель | следующий [–] Если/когда кто-то создаст приложение для Android, мы могли бы легко перенести его на Android TV с некоторыми настройками для поддержки контроллера и пульта ДУ. Однако играть в игры становится немного сложнее, так как встроенный плеер может не справляться с аппаратным обеспечением низкого уровня, используемым во многих потребительских смарт-телевизорах.
атрус 6 часов назад | предыдущая | следующая [–] Спасибо, что вы AGPLv3, и
отдельное большое спасибо за то, что четко изложили необходимую структуру каталогов. Иногда это не всегда понятно. Документация в целом отличная!
garrettjoecox 6 часов назад | предыдущая | следующая [–] Не могли бы вы объяснить преимущества использования этого по сравнению с retroarch, lakka.tv, emulator station, EmuDeck (оболочка Steam Deck для некоторых из них) и т. д.
Лично для меня игра через браузер кажется недостатком. 
zurdi 6 часов назад | родитель | следующий [–] Это решение с самостоятельным размещением, в отличие от всего упомянутого вами софта. Вы установите его на свой сервер через docker и будете управлять своей библиотекой ROM с помощью чистого интерфейса. Возможность играть в самом webUI — это дополнительное преимущество, поскольку мы только что интегрировали emualtorjs (с emulatorjs.org)
garrettjoecox 2 часа назад | корень | родитель | следующий [–] Я думаю, что я просто слишком далек от целевой аудитории, чтобы понять это. Я не вижу никаких других вариантов, кроме «самостоятельно размещенных», они не поддерживаются какой-либо облачной инфраструктурой, принадлежащей компании, это все локально запущенные приложения на вашем устройстве
гасси 2 часа назад | корень | родитель | следующий [–] Другими словами, эти приложения устанавливаются только на одном устройстве за раз, тогда как при установке RomM на сервере вы можете получить доступ к своей библиотеке с любого устройства с браузером. Есть будущее, в котором ES-DE и EmuDeck смогут извлекать игры с центрального сервера RomM и отправлять сохранения на него.
гасси 6 часов назад | родитель | предыдущий | следующий [–] В идеале вы бы использовали оба варианта, а сообщество создало бы интеграции, которые позволили бы, скажем, EmuDeck загружать игры с сервера на ваш Steam Deck и синхронизировать сохранения обратно на сервер.
Обычно я играю на Windows с помощью Playnite ( https://playnite.link/ ), а плагин ( https://github.com/rommapp/playnite-plugin ) позволяет Playnite извлекать и отображать список игр для каждой системы, после чего я могу установить те, в которые хочу играть, на свой ПК. 
mingw__ 6 часов назад | предыдущая | следующая [–] Особенно приятно видеть интеграцию с RetroAchievements!
реакторdev 5 часов назад | предыдущая | следующая [–] Напоминает мне версию hyperspin, вдохновленную «steam». Круто! Отличная работа. Все еще ищу хорошую замену hyperspin, работающую на Linux, которую я мог бы использовать на своих машинах.
гасси 5 часов назад | родитель | следующий [–] Я работаю над интеграцией RomM в Lutris (
https://lutris.net/ ) уже некоторое время, но она еще не готова, так как у меня не было времени ее закончить. Не как плагин, а прямо в основном репозитории Lutris:
https://github.com/gantoine/lutris/tree/romm-game-service
Это позволит вам хранить ваши игры на сервере, синхронизировать список в Lutris и устанавливать их, когда вы захотите в них играть. Я хотел бы получить рабочий POC для демонстрации команде Lutris поскорее. О, и если кто-то увидит это и захочет помочь нам, вклад всегда приветствуется! 
entropicdrifter 3 часа назад | корень | родитель | следующий [–] Лично мне бы очень хотелось увидеть это в Pegasus Frontend или Heroic Games Launcher.
гасси 2 часа назад | корень | родитель | следующий [–] Pegasus может использовать Lutris в качестве игрового источника, поэтому, если мы создадим «плагин» Lutris, мы получим поддержку Pegasus бесплатно!
https://pegasus-frontend.org/docs/user-guide/meta-sources/
UI_at_80x24 6 часов назад | предыдущая | следующая [–] Я не совсем понимаю, в чем здесь смысл.
Это MAME, но для игры в браузере? 
гасси 5 часов назад | родитель | следующий [–] По сути, это система для организации и отображения вашей коллекции ретро-игр (ROM). Вместо того, чтобы перемещаться по папкам или вручную перемещать игры с жесткого диска на любую систему, на которой вы хотите играть, вы можете загрузить их в RomM, перейти в приложение и скачать их из браузера.
Вы можете поделиться ею со своими друзьями, чтобы они могли получить доступ к вашей библиотеке, использовать плагины для загрузки игр напрямую на некоторые платформы (без браузера) или играть на старых системах в браузере в течение короткого сеанса.
В какой-то момент мы хотели бы реализовать синхронизацию файлов сохранений между устройствами, чтобы вы могли прекратить игру на одном устройстве и продолжить с того места, где остановились, на другом! 
mortos 5 часов назад | корень | родитель | следующий [–] Я увидел этот проект несколько месяцев назад, и он выглядит потрясающе, просто еще не реализовал его.
Как он справляется с современными играми? У меня много игр без DRM и небольших инди-проектов, которые я собрал/архивировал, и мне нужен способ аккуратно отображать их и загружать. 
zurdi 5 часов назад | корень | родитель | следующий [–] Вы можете отобразить почти все, что угодно, довольно хорошо. Для игр без DRM просто загрузите их как zip или поместите их в свою библиотеку как папку со всем внутри, и RomM отобразит их как все остальное. Вы можете сделать это в папке “win”, чтобы RomM знал, что это игры для ПК
mortos 4 часа назад | корень | родитель | следующий [–] Круто! Я также вижу, что RuffleRS также поддерживается для архивации флэш-памяти. Я сейчас этим займусь
отрава 5 часов назад | корень | родитель | предыдущий | следующий [–] Есть ли что-нибудь об интеграции с Batocera, ES-DE или Retroarch? Эти мегасистемы будут перегружены этим. Сообщество домашних лабораторий, вероятно, очень быстро это поймет.
гасси 4 часа назад | корень | родитель | следующий [–] Не план, но мы написали это некоторое время назад как исследование того, на какие системы/платформы мы можем нацелиться. Мы очень надеемся, что сообщество продолжит наращивать темпы с большим количеством плагинов и интеграций, чтобы мы могли сосредоточиться на основном сервисе.
zurdi 5 часов назад | корень | родитель | предыдущий | следующий [–] Сейчас у нас есть плагин playnite, приложение muOS/portmaster и текущий плагин decky для steam deck. У нас есть планы по интеграции с RetroDeck. С Retroarch не повезло, так как он не поддерживает плагины, но вы всегда можете использовать что-то вроде syncthing для тех, где у нас пока нет интеграции.
johanyc 5 часов назад | предыдущая | следующая [–] Это так круто, и вы можете играть в это прямо в браузере.
pdntspa 1 час назад | предыдущая [–] Давайте все вместе перестанем использовать слово «красивый» в описаниях приложений. Оно так часто используется и теперь фактически бессмысленно. Кроме того, красота должна быть в глазах смотрящего, а не создателя, пытающегося вложить слова в уста других людей.
Если вы стремитесь к «красоте» (что бы это ни значило на самом деле), то создайте ее на высоком уровне и позвольте другим людям самостоятельно подобрать слова. 
гасси 1 час назад | родитель [–] Мы создаем это приложение для себя, наших друзей и нашего сообщества, и если мы все вместе считаем его красивым, то оно объективно красиво. 🙂
pdntspa 41 минут назад | корень | родитель [–] Я вижу, что недосказанность не вызывает у тебя любви.

Source: news.ycombinator.com