返回资讯中心
外部精选
软件工程
#开发者实时流

开源工具BEA可精简Switch游戏文件夹,无需密钥

来源标题:BEA – Slim down Switch games you've extracted, no keys needed

开源工具BEA发布,可对用户自行提取的Switch游戏文件夹做瘦身和适配,处理过程无需主机密钥。它会展示文件夹内容、压缩过重的资源、按社区配置应用调整,并逐字节校验后生成可直接拷贝的mod文件夹。BEA不下载、解密或导出游戏,也不包含游戏代码、密钥或固件。

Hacker News 最新dexxz2026/11/13 · 今天30 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

让你拥有的游戏在你现有的硬件上重获新生。

把 BEA 指向你自己解包出来的游戏文件夹。它会显示里面有什么,把过于臃肿的部分瘦身,应用社区配置档案中声明的调整,校验它触碰的每一个字节,最后交给你一个可以直接复制的 mod 文件夹。

快速开始 · 功能一览 · 工作原理 · 为什么不做 NSP · 配置档案 · 路线图 · 参与贡献

BEA 只处理你从自己拥有的游戏中解包出来的游戏文件夹。它不会下载、解密或导出游戏;它不会读取、需要或包含主机密钥;本仓库不包含任何游戏代码、资源、密钥或固件。BEA 产出的一切都源自你手上的游戏副本:它始终属于你。

游戏越来越大:4K 纹理、1080p60 过场动画、为新硬件调优的设置。大量完全够用的硬件被甩在后面,而这些游戏的拥有者只能忍受漫长的加载时间、卡顿、爆满的存储和耗尽的电量。

BEA 是一个免费、开源、与具体游戏无关的处理管线,能让你拥有的游戏适配更普通的硬件——这正是「backport」一词本来的含义:

引擎对任何具体游戏一无所知。所有与游戏相关的内容都是一个小巧、人类可读的配置档案,社区可以编写、审查和分享,因为配置档案是配方,永远不是副本。

能力 0.1.0 中 🔎 检查文件夹:title ID、每个可执行模块及其 build ID、匹配的配置档案 ✅ 📊 只分析不改动:按文件类型清点、超大纹理、视频、疑似图形设置、引擎猜测、精确的执行计划 ✅ 🖼️ 缩小散装纹理(PNG、TGA、DDS):对任意像素格式无损丢弃 mip 层级,或用 Lanczos 等方法重采样;2 的幂纹理保持为 2 的幂;alpha 按直通或加权处理 ✅ 🎬 转码视频(MP4、WebM、MKV 等):缩小分辨率并限制帧率,保持容器和编码格式族不变 ✅ 需要 ffmpeg ⚙️ 编辑配置文件(INI、JSON、任意文本),同时保留注释、顺序、编码和 CRLF/LF 换行符 ✅ 🩹 安全地给可执行文件打补丁:每个补丁块都通过对模块中一段窗口的 SHA-256 校验,每个模块全有或全无,以 IPS / IPS32 格式写入 ✅ 📦 打包为 LayeredFS(atmosphere/… 布局)或扁平 mod 文件夹 ✅ ♻️ 只重建发生变化的部分:带缓存、原子写入、并行、可中断、可复现 ✅ 🧪 生成一个合成的示例游戏,无需任何真实游戏即可试用全部功能 ✅ 🤖 为 agent 做好准备:处处支持 --json、一个 agent skill、一份 Claude Code 插件清单 ✅ 🧩 NX 纹理容器(BNTX)内的纹理、block-linear 平铺、ASTC 编码 🔜 下一步 🏗️ Unity 和 Unreal Engine 容器(仅限以明文存储的部分) 🔭 更远期

快速开始 BEA 需要 Python 3.12 或更新版本,以及 uv。

git clone https://github.com/matheus-aragao-cavalcante/BEA-Backport-Engineering-Anything.git cd BEA-Backport-Engineering-Anything uv sync uv run bea doctor

一分钟试用,无需任何游戏 bea synth 会生成一个合成的示例游戏:程序生成的纹理、一个带有两个补丁位置的虚构可执行文件、配置文件,以及一个匹配的配置档案。其中没有任何内容来自真实游戏。

uv run bea synth .gamedump/sample --profiles-dir .gamedump/sample-profiles uv run bea build .gamedump/sample --profiles-dir .gamedump/sample-profiles --dry-run uv run bea build .gamedump/sample --profiles-dir .gamedump/sample-profiles Built <TitleID> -> out<TitleID> (atmosphere layout) Profile <TitleID> "BEA Synthetic Sample" in .gamedump\sample-profiles<TitleID> binary 1 done config 2 done texture 4 done assets 8.7 MiB -> 2.5 MiB skipped 1 unsupported Next: copy out<TitleID>\atmosphere to the root of your SD card.

再运行一次,每个操作都会直接命中缓存。unsupported 那一行是 BEA 在如实相告:有一张示例纹理使用了它暂时无法缩小的格式,它选择说出来,而不是假装成功。

BEA 期望的是一个你已经从自己拥有的游戏中解包出来的文件夹,其中包含 ExeFS 和/或 RomFS 目录。如何得到这个文件夹不在本项目的范围内。

uv run bea inspect .gamedump/MyGame # title ID、build ID、是否有配置档案? uv run bea analyze .gamedump/MyGame # 只读报告:backport_report.json uv run bea build .gamedump/MyGame --dry-run uv run bea build .gamedump/MyGame out/<TitleID>/ ├── atmosphere/ │ ├── contents/<TitleID>/romfs/... 只包含发生变化的文件 │ └── exefs_patches/bea-<TitleID>/<BuildID>.ips 已校验的可执行文件补丁 ├── bea_build.json 每一个操作、每一次跳过、每一条原因 └── DO_NOT_DISTRIBUTE.txt

没有配置档案时,BEA 只会把散装纹理缩小到目标尺寸(默认 1280x720,可用 --max-width / --max-height 修改)。如果 profiles/<TitleID>/ 下存在配置档案,它还会修改设置、转码视频,并写入针对你这个精确构建所声明的补丁。

flowchart LR A["📁 你解包的文件夹<br/>ExeFS + RomFS"] --> B["🔎 读取<br/>title ID · build IDs · 索引"] P["📜 配置档案<br/>profile.yaml + patches.yaml"] --> C B --> C["🧭 计划<br/>校验每一条假设<br/>(不写入任何内容)"] C --> D["⚙️ 执行<br/>缓存 · 原子写入 · 并行"] D --> E["📦 打包<br/>LayeredFS mod 文件夹"] C -. "bea analyze<br/>bea build --dry-run" .-> R["📊 报告"] Loading

读取阶段直接从文件本身获取身份信息:title ID 来自 main.npdm,build ID 来自每个模块头,此外还有 RomFS 的索引。BEA 从不写入你的输入文件夹。

计划阶段会询问每个转换器它打算做什么,并用你的文件校验配置档案:设置项必须存在,补丁窗口必须匹配。与你的版本不匹配的配置档案会被拒绝,而不是靠猜。

执行阶段每个操作只运行一次;结果按内容和参数缓存,并以原子方式写入,因此中断的构建可以直接续跑。

打包阶段只布局发生变化的文件。一份清单会记录 BEA 创建了哪些内容,这样后续构建可以自行清理,而绝不会碰到你自己的文件。

为什么 BEA 永远不会打开 NSP 这是本项目最重要的设计决策,而且是有意为之。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →