复古游戏库管理器RomM

在这里插入图片描述

什么是 RomM ?

RomM(代表 Rom Manager)是一个专注于复古游戏的游戏库管理器。通过 Web 浏览器管理和组织您的所有游戏。受 Jellyfin 的启发,允许您从现代界面管理所有游戏,同时使用 IGDB 元数据丰富它们。

RomM 支持的游戏库类型比较多,gbagbcswitch

在这里插入图片描述

但需要注意的是,如果你的群晖不支持科学上网 ,会导致扫描游戏库时无法结束,所以要在域名黑名单中加上 twitch.tv

在这里插入图片描述

如果群晖不具备科学上网的条件,就不用浪费时间了

前期准备

建数据库

RomM 支持 MariaDBSQLite 两种数据库,老苏原本想用群晖自带的 MariaDB 10 数据库,但运行时容器日志中会显示 CRITICAL: [ROMM] Not supported "mariadb" database

本文完成于 3 月底,现在是不是已经支持,老苏没再试,也许可以了,也许还是不行;

在这里插入图片描述

所以最后用了 SQLite,当然你用 MySQL 容器也是可以的

注册 IGDB

RomM 使用了互联网游戏数据库 ( IGDB ) 加载信息,为了使用其 API,必须要拥有一个 Twitch 帐户。

官方文档有注册的流程:https://api-docs.igdb.com/#account-creation

直接打开 https://dev.twitch.tv/login 注册免费账号,登录后需要在 https://www.twitch.tv/settings/security 中开启双重身份认证

在这里插入图片描述

手机上需要下载验证器应用,可以用 microsoftAuthenticator 或者 Authy

在这里插入图片描述

用生成的 6 位数字验证

在这里插入图片描述

要支持多种验证,否则一旦验证器不在身边,会比较麻烦

在这里插入图片描述

应用程序 --> 注册您的应用程序

在这里插入图片描述

随便填的,因为实际上用不到回调

在这里插入图片描述

进入 管理

在这里插入图片描述

记下 客户端 IDClient ID) 和 客户端密码Client Secret

在这里插入图片描述

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 romm ,选择第一个 zurdi15/romm,版本选择 latest

本文最后折腾时, latest 版本对应为 1.8.4,本文发布时,最新版本为 1.9.1

在这里插入图片描述

docker 文件夹中,创建一个新文件夹 romm,并在其中建三个子文件夹 databaselibraryresources

文件夹装载路径说明
docker/romm/database/romm/database存放数据库
docker/romm/library/romm/library游戏库
docker/romm/resources/romm/resources封面

在这里插入图片描述

端口

本地端口不冲突就行,不确定的话可以用命令查一下

# 查看端口占用
netstat -tunlp | grep 端口号
本地端口容器端口
303880

在这里插入图片描述

环境

可变
ROMM_DB_DRIVER数据库类型可以是 sqlite 或者 mariadb
CLIENT_IDIGDB 申请的 Client ID
CLIENT_SECRETIGDB 申请的 Client Secret
STEAMGRIDDB_API_KEY默认设为 WIP,应该还没启用

在这里插入图片描述

更多的环境变量,可以参考官方的样例:https://github.com/zurdi15/romm/blob/master/examples/docker-compose.example.yml

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

# 新建文件夹 romm 和 子目录
mkdir -p /volume2/docker/romm/{database,library,resources}# 进入 romm 目录
cd /volume2/docker/romm# 运行容器
docker run -d \--restart unless-stopped \--name romm \-p 3038:80 \-v $(pwd)/library:/romm/library \-v $(pwd)/database:/romm/database \-v $(pwd)/resources:/romm/resources \-e ROMM_DB_DRIVER=sqlite \-e CLIENT_ID=<你的 Client ID> \-e CLIENT_SECRET=<你的 Client Secret> \-e STEAMGRIDDB_API_KEY=WIP \zurdi15/romm:latest

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

zurdi15/romm:latest 对应的版本是 1.3

version: '3'services:romm:image: zurdi15/romm:latestcontainer_name: rommrestart: "unless-stopped"volumes:- ./library:/romm/library- ./database:/romm/database- ./resources:/romm/resourcesports:- 3038:80environment:- ROMM_DB_DRIVER=sqlite- CLIENT_ID=<你的 Client ID>- CLIENT_SECRET=<你的 Client Secret>- STEAMGRIDDB_API_KEY=WIP

然后执行下面的命令

# 新建文件夹 romm 和 子目录
mkdir -p /volume2/docker/romm/{database,library,resources}# 进入 romm 目录
cd /volume2/docker/romm# 将 docker-compose.yml 放入当前目录# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:3038 就能看到主界面

在这里插入图片描述

上传游戏库

老苏在:http://www.gbarom.cn 随便下了几个,用于测试

游戏库的结构是有要求的,因为还不支持从网页上传,所以需要在 File Station 中自行上传。

RomM目前支持两种不同的文件夹结构,首先会尝试查找 结构 1,如果不存在,将尝试查找 结构 2

  • 结构 1(高优先级)- 库文件夹根目录下的 roms 文件夹:
library/
├─ roms/├─ gbc/│  ├─ rom_1.gbc│  ├─ rom_2.gbc│├─ gba/│  ├─ rom_1.gba│  ├─ rom_2.gba│ ├─ ps/├─ my_multifile_game/│   ├─ my_game_cd1.iso│   ├─ my_game_cd2.iso│├─ rom_1.iso
  • 结构 2(低优先级)- 每个平台文件夹内的 roms 文件夹
library/
├─ gbc/
│  ├─ roms/
│     ├─ rom_1.gbc
│     ├─ rom_2.gbc
|
├─ gba/
│  ├─ roms/
│     ├─ rom_1.gba
│     ├─ rom_2.gba
|
├─ ps/
│  ├─ roms/
│     ├─ my_multifile_game/
│     │  ├─ my_game_cd1.iso
│     │  ├─ my_game_cd2.iso
│     │
│     ├─ rom_1.iso

老苏采用的是 结构 1

在这里插入图片描述

开始扫描

在这里插入图片描述

扫描完成后会有提示

在这里插入图片描述

理论上会有封面,但是可能老苏下载的 rom 是修改过的吧

目前的版本还不支持自定义游戏封面

在这里插入图片描述

可以直接下载

在这里插入图片描述

添加 rom 后需要重新 scan

在这里插入图片描述

点标题,会显示详情

在这里插入图片描述

还可以编辑

在这里插入图片描述

参考文档

zurdi15/romm: RomM (Rom Manager) is a web based retro roms manager integrated with IGDB.
地址:https://github.com/zurdi15/romm

RomM - Retro games library manager : selfhosted
地址:https://www.reddit.com/r/selfhosted/comments/123syuc/romm_retro_games_library_manager/

[Other] error bind mount using example compose file · Issue #35 · zurdi15/romm
地址:https://github.com/zurdi15/romm/issues/35

超级马里奥乐园1:DX - 掌机迷 - GBC游戏下载_GBC游戏攻略
地址:http://www.gbarom.cn/gbc/50497.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/33400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法挨揍日记】day02——双指针算法_快乐数、盛最多水的容器

202. 快乐数 202. 快乐数https://leetcode.cn/problems/happy-number/ 题目&#xff1a; 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个…

宋浩高等数学笔记(十一)曲线积分与曲面积分

个人认为同济高数乃至数学一中最烧脑的一章。。。重点在于计算方式的掌握&#xff0c;如果理解不了可以暂时不强求&#xff0c;背熟积分公式即可。此外本贴暂时忽略两类曲面积分之间的联系&#xff0c;以及高斯公式的相关内容&#xff0c;日后会尽快更新&#xff0c;争取高效率…

PHP 之房贷计算器、组合贷

一、等额本金 // &#xff08;等额本金&#xff09; //$loanAmount>贷款金额 //$loanPeriod>贷款年限 //$interestRate>贷款利息 function calculateEqualPrincipalPayment($loanAmount, $loanPeriod, $interestRate) {$monthlyPrincipal $loanAmount / ($loanPerio…

【数据结构】二叉树常见题目

文章目录 前言二叉树概念满二叉树完全二叉树二叉搜索树(二叉排序树)平衡⼆叉搜索树存储⽅式 二叉树OJ二叉树创建字符串二叉树的分层遍历1二叉树的分层遍历2给定一个二叉树, 找到该树中两个指定节点的最近公共祖先二叉树搜索树转换成排序双向链表二叉树展开为链表根据一棵树的前…

山东布谷科技直播系统源码热点分析:不同芯片实现高质量编码与渲染视频的GPU加速功能

在现代科技的迅猛发展下&#xff0c;直播系统源码平台被开发搭建出来&#xff0c;为人们的生活方式带来了很大的改变&#xff0c;直播系统源码平台的好友、短视频、直播、社区等功能让很多人越来越热衷于去在平台上刷视频、看直播、分享生活。用户的喜爱也督促了直播系统源码平…

nodejs+vue+elementui小区物业管理系统_78ahx

课题主要分为四大模块&#xff1a;即管理员模块&#xff0c;物业管理模块、业主模块和维修员模块&#xff0c;主要功能包括&#xff1a;个人中心、物业管理、业主管理、维修员管理、小区公告管理、小区信息管理、房产信息管理、车位信息管理、停车位管理、停车信息管理、缴费信…

Grafana技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》-附带监控服务器

阿丹&#xff1a; Prometheus技术文档--基本安装-docker安装并挂载数据卷-《十分钟搭建》_一单成的博客-CSDN博客 在正确安装了Prometheus之后开始使用并安装Grafana作为Prometheus的仪表盘。 一、拉取镜像 搜索可拉取版本 docker search Grafana拉取镜像 docker pull gra…

RabbitMQ:可靠消息传递的强大消息中间件

消息中间件在现代分布式系统中起着关键作用&#xff0c;它们提供了一种可靠且高效的方法来进行异步通信和解耦。在这篇博客中&#xff0c;我们将重点介绍 RabbitMQ&#xff0c;一个广泛使用的开源消息中间件。我们将深入探讨 RabbitMQ 的特性、工作原理以及如何在应用程序中使用…

移动端APP测试常见面试题精析

现在面试测试职位&#xff0c;要求非常全面&#xff0c;那么APP测试一般需要哪些技术呢&#xff1f;下面总结了APP测试常见面试题&#xff1a; 1.Android四大组件? Activity:描述UI&#xff0c;并且处理用户与机器屏幕的交互。应用程序中&#xff0c;一个Activity就相当于手…

Python-OpenCV中的图像处理-霍夫变换

Python-OpenCV中的图像处理-霍夫变换 霍夫变换霍夫直线变换霍夫圆环变换 霍夫变换 霍夫(Hough)变换在检测各种形状的技术中非常流行&#xff0c;如果要检测的形状可以用数学表达式描述&#xff0c;就可以是使用霍夫变换检测它。即使要检测的形状存在一点破坏或者扭曲也是可以使…

FinClip 支持小程序维度域名配置;桌面端体验活动进行中

FinClip 的使命是使您&#xff08;业务专家和开发人员&#xff09;能够通过小程序解决关键业务流程挑战&#xff0c;并完成数字化转型的相关操作。不妨让我们看看在本月的产品与市场发布亮点&#xff0c;看看是否有助于您实现目标。 产品方面的相关动向&#x1f447;&#x1f…

springboot 设置自定义启动banner背景图 教程

springboot banner Spring Boot中的banner是在应用程序启动时显示的一个ASCII艺术字符或文本。它被用来给用户展示一些关于应用程序的信息&#xff0c;例如名称、版本号或者公司标志等。 使用Spring Boot的默认设置&#xff0c;如果项目中有一个名为“banner.txt”的文件放置…

体渲染原理及WebGL实现【Volume Rendering】

体渲染&#xff08;Volume Rendering&#xff09;是NeRF神经场辐射AI模型的基础&#xff0c;与传统渲染使用三角形来显示 3D 图形不同&#xff0c;体渲染使用其他方法&#xff0c;例如体积光线投射 (Volume Ray Casting)。本文介绍体渲染的原理并提供Three.js实现代码&#xff…

使用CST仿真软件完成单站雷达目标RCS仿真

第一步&#xff1a;新建模版 第二步&#xff1a;选择微波与射频/光学应用 第三步&#xff1a;选择雷达应用 第四步&#xff1a;选择单站雷达静态RCS 第五步&#xff1a;选择小目标工作流。&#xff08;这里的小目标要求小于10倍波长&#xff0c;否则需要选大目标工作流&#x…

golang协程池库tunny实践

前言 线程池大家都听过&#xff0c;其主要解决的是线程频繁创建销毁带来的性能影响&#xff0c;控制线程数量。 go协程理论上支持百万协程并发&#xff0c;协程创建调度的消耗极低&#xff0c;但毕竟也是消耗对吧。 而且协程池可以做一些额外的功能&#xff0c;比如限制并发&…

[数据集][目标检测]道路坑洼目标检测数据集VOC格式1510张2类别

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;1510 标注数量(xml文件个数)&#xff1a;1510 标注类别数&#xff1a;2 标注类别名称:["keng","…

百度智能云:千帆大模型平台接入Llama 2等33个大模型,上线103个Prompt模板

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…

Git全栈体系(五)

第八章 IDEA 集成 GitHub 一、设置 GitHub 账号 如果出现 401 等情况连接不上的&#xff0c;是因为网络原因&#xff0c;可以使用以下方式连接&#xff1a; 然后去 GitHub 账户上设置 token。 点击生成 token。 复制红框中的字符串到 idea 中。 点击登录。 二、分享工程…

Stephen Wolfram:让 ChatGPT 真正起作用的是什么?

What Really Lets ChatGPT Work? 让 ChatGPT 真正起作用的是什么&#xff1f; Human language—and the processes of thinking involved in generating it—have always seemed to represent a kind of pinnacle of complexity. And indeed it’s seemed somewhat remarkabl…

最新版本的Anaconda环境配置、Cuda、cuDNN以及pytorch环境一键式配置流程

本教程是最新的深度学习入门环境配置教程&#xff0c;跟着本教程可以帮你解决入门深度学习之前的环境配置问题。同时&#xff0c;本教程拒绝琐碎&#xff0c;大部分以图例形式进行教程。这里我们安装的都是最新版本~ 文章目录 一、Anaconda的安装1.1 下载1.2 安装1.3 环境配置…