如何让 Tinfoil 从 RomM 下载 Switch 游戏自定义 Feed 配置【免费下载链接】rommA beautiful, powerful, self-hosted ROM manager and player.项目地址: https://gitcode.com/GitHub_Trending/rom/romm如果你的 RomM 实例里已经扫描进了 Nintendo Switch 平台的 ROM想让 Switch 上的 Tinfoil 客户端直接从 RomM 下载游戏文件就需要配置 RomM 内置的 Tinfoil 自定义 Feed 接口。RomM 后端提供了一个 Tinfoil custom index 格式的端点GET /api/feeds/tinfoil实现在 backend/endpoints/feeds.py它会返回当前库中 Switch 平台的游戏文件下载列表和 titledb 元数据。配置完成后Tinfoil 通过这一个地址即可浏览并下载你的 Switch 游戏库。前提条件一个正在运行的 RomM 实例仓库根目录提供了 docker-compose.yml、env.template 等部署与配置模板。库中已存在 Nintendo Switch 平台且该平台下有磁盘文件真实存在的游戏。Feed 只会列出「文件在磁盘上存在」的 ROM源码中通过HAS_FILE_ON_DISK_FILTERS过滤文件缺失的条目不会出现。Feed 中每个条目的下载 URL 指向 RomM 的 ROM 文件下载端点/api/roms/{id}/files/content/{file_name}这一点决定了下面必须修改的环境变量。配置环境变量Feed 端点本身不需要认证路由声明中 scope 列表为空但 Feed 返回的每个下载链接指向的文件下载端点默认要求ROMS_READ权限。Tinfoil 不会携带 RomM 的登录凭证因此必须关闭下载端点的认证否则 Tinfoil 能拉到列表、但下载文件时会收到 401。在 RomM 服务的环境变量配置中项目以 env.template 作为环境变量模板修改DISABLE_DOWNLOAD_ENDPOINT_AUTHtrue # Disable auth on the download endpoint for WebRcade/Tinfoil TINFOIL_WELCOME_MESSAGERomM Switch Library # 可选Tinfoil 客户端中显示的欢迎信息DISABLE_DOWNLOAD_ENDPOINT_AUTH默认false。docs/BACKEND_ARCHITECTURE.md 将其描述为 Allow unauthenticated downloadsenv.template 注释明确说明它用于 WebRcade/Tinfoil 场景。设为true后下载端点不再要求任何凭证——这是公开下载接口的行为注意它同时放开所有走该端点的文件下载。TINFOIL_WELCOME_MESSAGE可选默认值为RomM Switch Library会作为响应中的success字段显示在 Tinfoil 客户端中见 backend/config/init.py。修改环境变量后重启 RomM 服务使其生效。获取 Feed 地址并验证Tinfoil 使用的完整 Feed 地址为http://你的RomM服务地址/api/feeds/tinfoil?slugswitch其中你的RomM服务地址替换为你实际访问 RomM 的域名或主机:端口slug参数指定平台 slug默认就是switch可以省略。在能访问 RomM 的机器上执行curl http://你的RomM服务地址/api/feeds/tinfoil?slugswitch返回应为 HTTP 200 的 JSON结构由 TinfoilFeedSchema 定义。根据该模式响应形态如下示例结构具体条目数量与你的库一致{ files: [ { url: http://你的RomM服务地址/api/roms/1/files/content/Test%20Switch.nsp, size: 456 } ], directories: [], success: RomM Switch Library, titledb: {} }files每个条目包含url文件下载直链和size字节。success即TINFOIL_WELCOME_MESSAGE的值。titledb以 nsuId 为键的元数据字典条目字段包括id、name、description、region、publisher、releaseDate、size、version、rating、rank见 TinfoilFeedTitleDBSchema。文件名中带 TitleDB 格式或 ProductID 格式的 ROM 会由 IGDB 数据填充该字段解析不出 nsuId 的条目会被跳过。测试代码 backend/tests/endpoints/test_feeds.py 展示了验证方式请求/api/feeds/tinfoil?slugswitch期望得到 200且files中每条的size 0。在 Tinfoil 中使用该端点按 Tinfoil 的 custom index 格式实现feeds.py 中的 docstring 即标注了 tinfoil custom index feed endpoint。在 Tinfoil 的 custom index 配置中填入上面验证过的 Feed 地址Tinfoil 即可把 RomM 的游戏文件列表作为索引浏览并下载。Tinfoil 客户端内的具体菜单操作不在本仓库文档范围内以 Tinfoil 客户端自身的 custom index 设置界面为准。结果判断与限制files为空数组Feed 会列出扩展名仅限xci、nsp、nsz、xcz、nro的 ROM 文件feeds.py。其他扩展名的 Switch 文件如 zip 压缩包不会出现在列表里。响应中带error字段当库中查不到指定 slug 对应的平台时返回{files: [], directories: [], error: Nintendo Switch platform not found}此时应检查平台 slug 是否正确默认switch。列表可见但下载失败通常是DISABLE_DOWNLOAD_ENDPOINT_AUTH未设为true或未重启生效下载链接会因未认证返回 401。权限可见性如果请求携带了认证身份该用户被权限规则隐藏的 Switch 平台或 ROM 不会出现在 Feed 中未认证请求则没有隐藏范围。以 Tinfoil 匿名访问的形态使用时全部已扫描且在磁盘上的 Switch 游戏都会列出。完成以上配置后用 Tinfoil 打开 custom index 应能看到TINFOIL_WELCOME_MESSAGE的欢迎信息与游戏列表点击某个条目即通过files中对应的url从 RomM 拉取文件这就是整条链路的最终验证结果。【免费下载链接】rommA beautiful, powerful, self-hosted ROM manager and player.项目地址: https://gitcode.com/GitHub_Trending/rom/romm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考