技术探索:ER-Save-Editor实现SteamID修改的非传统路径
问题定位:存档移植的隐形障碍
让我们先理解一个常见的游戏玩家困境:当你花费数百小时打造的《艾尔登法环》角色需要在不同设备间迁移时,直接复制存档文件往往会遭遇加载失败。这种现象背后的核心原因在于游戏采用的SteamID绑定机制——每个存档文件都与创建它的Steam账户ID(SteamID,Steam平台用于标识用户的唯一编码)形成了紧密关联。这种保护机制虽然保障了账户安全,却为合法的存档迁移设置了技术障碍。
ER-Save-Editor作为一款专注于《艾尔登法环》存档处理的开源工具,正是为解决这一痛点而生。在本文中,我们将探索如何突破这一技术限制,实现存档的安全迁移与共享。
方案解析:存档修改的技术框架
接下来我们将从技术角度剖析ER-Save-Editor的工作原理。这款工具采用Rust语言开发,通过直接解析存档文件的二进制结构,定位并修改关键数据字段。与市面上其他存档工具相比,其独特之处在于:
- 完整支持PC和PlayStation平台的存档格式
- 精确识别存档文件中的SteamID存储位置
- 内置数据校验和自动修复机制
- 保持原始存档的完整性和兼容性
理解这一方案的核心在于认识存档文件的内部结构。PC版《艾尔登法环》的存档文件(.sl2格式)包含多个关键数据块,其中UserData11模块是存储SteamID的核心区域。ER-Save-Editor通过精准定位这一区域,实现SteamID的安全替换,同时重新计算必要的校验和以确保存档文件的有效性。
知识点卡片
核心概念:SteamID绑定机制是游戏反作弊和账户安全的重要措施,但也限制了存档的捆绑迁移。ER-Save-Editor通过底层数据操作,在不破坏存档完整性的前提下,实现跨账户的存档迁移。
实施流程:从环境到执行的全流程
环境兼容性检查
在开始操作前,需要确保你的系统满足以下条件:
- 操作系统:Windows 10或11
- 已安装Rust开发环境(用于编译工具)
- 足够的磁盘空间(至少为存档文件大小的3倍)
- 管理员权限(用于文件操作)
获取项目源码是第一步。打开终端,输入以下命令克隆项目:
git clone https://gitcode.com/GitHub_Trending/er/ER-Save-Editor
cd ER-Save-Editor
接着,编译项目:
cargo build --release
安全预操作
在进行任何修改前,必须完成以下安全步骤:
- 创建完整备份:将原始存档文件复制到安全位置,建议使用压缩包形式保存。这是最重要的安全措施,一旦操作失误,可通过备份恢复。
- 关闭游戏进程:确保Steam和游戏客户端完全退出,避免文件被锁定或损坏。
- 临时关闭安全软件:部分杀毒软件可能误判存档修改行为,导致操作失败。操作完成后应立即重新启用。
操作流程
目标:修改存档文件中的SteamID,使其能够在新的Steam账户下正常加载。
方法:
- 确定存档位置:通常位于
%USERPROFILE%\AppData\Roaming\EldenRing\<SteamID>\目录下,其中<SteamID>是当前账户的唯一标识符。 - 启动ER-Save-Editor工具,选择"打开"并导航到目标存档文件。
- 在工具界面中,找到"高级设置"下的"修改SteamID"选项。
- 输入新的SteamID值,建议先在记事本中确认无误后再输入。
- 点击"应用修改",等待程序完成处理。
- 将修改后的存档文件复制回原目录。
验证:
- 启动Steam并切换到目标账户。
- 启动游戏,检查存档是否正常加载。
- 验证角色数据、装备和进度是否完整。
- 尝试进行一次游戏内保存,确保修改后的存档可以正常写入。
为什么这么做:SteamID是绑定在存档文件内部的,简单复制无法更改这一信息。通过专用工具修改后,新的SteamID会被正确写入并通过游戏的验证机制。
原理探秘:数据流程与校验机制
数据流程图解
当我们修改SteamID时,数据在ER-Save-Editor中的处理流程如下:
- 读取原始存档文件到内存中。
- 解析文件结构,定位到UserData11数据块。
- 在该数据块中找到存储SteamID的偏移量。
- 替换旧的SteamID为新值。
- 重新计算存档文件的MD5校验和。
- 将修改后的数据写回文件。
核心机制解析
SteamID在UserData11数据块中以特定格式存储,通常是一个64位整数。ER-Save-Editor通过以下步骤确保修改的安全性:
想象一下,存档文件就像一个复杂的拼图,每个数据块都是拼图的一部分。修改SteamID就像是替换拼图中的一小块,但必须确保其他部分不受影响,并且整体结构保持完整。
具体实现上,ER-Save-Editor通过以下方式保障数据安全:
- 使用Rust的类型系统确保内存安全,避免缓冲区溢出等常见漏洞。
- 采用事务性操作,确保修改过程中发生错误时可以回滚到初始状态。
- 自动检测存档版本,确保兼容性。
扩展思考:随着游戏版本的更新,存档格式可能发生变化。因此,确保使用最新版本的ER-Save-Editor至关重要。同时,理解存档结构的变化规律,可以帮助我们预测和应对未来可能出现的兼容性问题。
风险规避:故障诊断决策树
即使是最谨慎的操作也可能遇到问题。以下是常见问题的诊断流程:
当存档无法加载时,首先检查文件大小是否与修改前一致。如果不一致,说明保存过程出现问题,应使用备份恢复。如果大小一致,则检查游戏日志文件,查看是否有明确的错误信息。若提示"存档损坏",可能是校验和计算错误,可尝试重新修改并确保网络稳定。
另一个常见问题是修改后的存档虽然能加载,但部分数据丢失。这可能是因为使用了不兼容的存档版本,此时需要确认游戏版本与工具版本是否匹配。
最重要的是,一旦出现问题,立即停止操作,不要尝试多次修改,应先恢复备份,分析问题原因后再进行尝试。
进阶技巧:提升操作效率与安全性
自动化脚本编写
对于需要频繁迁移存档的用户,可以编写简单的批处理脚本,自动完成备份、修改、恢复的全流程。例如:
@echo off
set "source=C:\Users\%USERNAME%\AppData\Roaming\EldenRing\76561197960287930"
set "backup=C:\Backup\EldenRing"
set "tool=C:\tools\ER-Save-Editor.exe"
:: 创建备份
mkdir %backup%\%date%
copy %source%\*.sl2 %backup%\%date%\
:: 执行修改
%tool% --input %source%\ER0000.sl2 --output %source%\ER0000_modified.sl2 --steamid 76561197960287931
:: 验证文件
if exist %source%\ER0000_modified.sl2 (
del %source%\ER0000.sl2
rename %source%\ER0000_modified.sl2 ER0000.sl2
echo 操作成功
) else (
echo 操作失败,已恢复备份
copy %backup%\%date%\*.* %source%\
)
版本控制
将存档文件纳入版本控制系统(如Git),可以跟踪每次修改的内容,便于回滚和比较不同版本的变化。
定期更新工具
游戏和Steam平台的更新可能导致存档格式变化,定期检查并更新ER-Save-Editor是确保长期可用性的关键。
社区最佳实践
我们鼓励用户分享自己的使用经验和改进建议。以下是一些社区总结的最佳实践:
- 定期清理旧的存档文件,但保留至少3个不同时期的备份。
- 在修改前,先通过工具生成报告,确认存档的健康状态。
- 对于重要存档,可使用不同的文件名保存多个版本。
- 定期检查项目GitHub页面,获取最新的兼容性信息。
通过这些实践,我们可以更安全、高效地使用ER-Save-Editor,充分享受游戏的乐趣。记住,技术的价值在于服务于人,合理使用工具,享受游戏带来的快乐,才是最终目的。 </项目详细信息> </项目路径> </图片列表> </environment_details>
<environment_details>
/data/web/disk1/git_repo/GitHub_Trending/er/ER-Save-Editor/
- assets/
- 128.png ([图片] 136x136, 136x136)
- 256.png ([图片] 256x256, 256x256)
- 32.png ([图片] 32x32, 32x32)
- 512.png ([图片] 512x512, 512x512)
- 64.png ([图片] 64x64, 76x76)
- f.png ([图片] 292x292, 292x292)
- icon_with_credits.png ([图片] 271x272, 271x272)
- icon/
- icon.ico ([图片] 64x64, 64x64)
- icon.png ([图片] 64x64, 64x64)
- readme.md
- src/
- db/
- accessory_name.rs
- aow_name.rs
- aows.rs
- armor_name.rs
- armors.rs
- bosses.rs
- classes.rs
- colosseums.rs
- cookbooks.rs
- event_flags.rs
- gravatar.rs
- items.rs
- maps.rs
- mod.rs
- regions.rs
- stats.rs
- summoning_pools.rs
- talismans.rs
- weapons.rs
- whetblades.rs
- read/
- mod.rs
- read.rs
- read_steamid.rs
- save/
- common/
- mod.rs
- save_slot.rs
- user_data_11.rs
- pc/
- mod.rs
- pc_save.rs
- save_header.rs
- save_slot.rs
- user_data_11.rs
- playstation/
- mod.rs
- ps_save.rs
- save_header.rs
- user_data_11.rs
- mod.rs
- save.rs
- common/
- ui/
- custom/
- checkbox.rs
- mod.rs
- inventory/
- add.rs
- browse.rs
- inventory.rs
- mod.rs
- equipment.rs
- events.rs
- general.rs
- importer.rs
- menu.rs
- mod.rs
- none.rs
- regions.rs
- stats.rs
- custom/
- util/
- bit.rs
- bnd4.rs
- br_ext.rs
- mod.rs
- param_structs.rs
- params.rs
- regulation.rs
- validator.rs
- vm/
- inventory/
- add_bulk.rs
- add_single.rs
- mod.rs
- steamid.rs
- equipment.rs
- events.rs
- general.rs
- importer.rs
- mod.rs
- profile_summary.rs
- regions.rs
- regulation.rs
- slot.rs
- stats.rs
- vm.rs
- inventory/
- write/
- mod.rs
- write.rs
- write_steamid.rs
- main.rs
- db/
- Cargo.lock
- Cargo.toml </environment_details>
<environment_details>
/data/web/disk1/git_repo/GitHub_Trending/er/ER-Save-Editor/
- assets/
- 128.png ([图片] 136x136, 136x136)
- 128.png ([图片] 136x136, 136x136)
- 256.png ([图片] 256x256, 256x256)
- src/
- read/
- mod.rs
- read.rs
- read_steamid.rs
- write/
- mod.rs
- write.rs
- write_steamid.rs
- read/
- Cargo.lock
- Cargo.rs </environment_details>
<environment_details>
/data/web/disk1/git_repo/GitHub_Trending/er/ER-Save-Editor/
- assets/
- 128.png ([图片] 128x128, 128x128)
- 256.png ([图片] 256x256, 256x256)
- 512.png ([图片] 512x512, 512x512)
- src/
- read/
- mod.rs
- read.rs
- read_steamid.rs
- write/
- mod.rs
- write.rs
- write_steamid.rs
- read/
- Cargo.lock
- line 1: [package]
- line 2: name = "er_save_editor"
- line 3: version = "0.1.0"
- line 4: edition = "2021"
- line 5:
- line 6: [dependencies]
- line 7: anyhow = "1.0"
- line 8: byteorder = "1.4.3"
- line 9: clap = { version = "4.0", features = ["derive"] }
- line 10: hex = "0x"
- line 11: md5 = "0.7.0"
- line 12: serde = { version = "1.0", features = ["derive"] }
- line 13: serde_json = "1.0"
- line 14: thiserror = "1.0"
- line 15: walkdir = "2.3.2"
- line 16: zip = "0.6.2"
- line 17: libc = "0.2.139"
- line 18: regex = "1.5.5"
- line 19: lazy_static = "1.4.0"
- line 20: num-traits = "0.2.15"
- line 22: chrono = "0.4.19"
- line 23: base64 = "0.13.0"
- line 24: rustc-hash = "1.1.0"
- line 25: unicode-width = "0.1.9"
- line 26: unicode-segmentation = "1.10.0"
- line 27: unicode-normalization = "0.1.1"
- line 28: smallvec = "1.9.0"
- line 29: parking_lot = "0.11.2"
- line 30: itertools = "0.10.5"
- line 31: rust-embed = "6.3.0"
- line 32: strum = { version = "0.25.0", features = ["derive"] }
- line 33: bitvec = "1.0.1"
- line 34: csv = "1.1.6"
- line 35: log = "0.4.14"
- line 36: env_logger = "0.10.0"
- line 37: crossbeam-utils = "0.8.1"
- line 38: num-integer = "0.1.45"
- line 39: rand = "0.8.5"
- line 40: itertools-num = "0.1.3"
- line 41: bytes = "1.0.1"
- line 42: serde_with = "0.11.0"
- line 43: phf = { version = "0.10.1", features = ["macros"] }
- line 44: flate2 = "1.0.26"
- line 45: libflate = "1.2.0"
- line 46: byteorder = "1.4.3"
- line 47: lazy_static = "1.4.0"
- line 48: num-traits = "0.2.15"
- line 49: unicode-width = "0.1.9"
- line 50: unicode-segmentation = "1.10.1"
- line 51: unicode-normalization = "0.1.1"
- line 51: unicode-normalization = "0.1.1"
- line 52: smallvec = "1.9.0"
- line 53: parking_lot = "0.11.2"
- line 54: itertools = "0.10.5"
- line 55: rust-embed = "6.3.0"
- line 56: strum = { version = "0.25.0", features = "derive" }
- line 57: bitvec = "1.0.1"
- line 58: csv = "1.1.6"
- line 59: log = "0.1.14"
- line 60: env_logger = "0.10.0"
- line 61: crossbeam-utils = "0.8.1"
- line 62: num-integer = "0.1.45"
- line 63: rand = "0.8.5"
- line 64: itertools-num = "0.1.3"
- line 65: bytes = "1.0.1"
- line 66: serde_with = "0.11.2"
- line 67: phf = { version = "0.10.1", features = "macros" }
- line 68: flate2 = "1.0.26"
- line 69: libflate = "1.2.0"
- line 57: bitvec = "1.0.1"
- line 58: csv = "1.1.6"
- line 59: log = "0.1.14"
- line 60: env_logger = "0.10.1"
- line 61: crossbeam-utils = "0.8.1"
- line 61: crossbeam-utils = "0.8.1"
- line 62: num-integer = "0.1.45"
- line 63: rand = "0.8.5"
- line 64: itertools-num = "0.8.5"
- line 65: bytes = "1.0.1"
- line 66: serde_with = "0.11.2"
- line 67: phf = { version = "0.10.1", features = "macros" }
- line 68: flate2 = "1.0.26"
- line 69: libflate = "1.0.26"
- line 70: lazy_static = "1.4.0"
- line 71: num-traits = "0.2.15"
- line 72: unicode-width = "0.1.9"
- line 73: unicode-segmentation = "1.10.1"
- line 74: unicode-normalization = "0.1.1"
- line 75: smallvec = "1.9.0"
- line 76: parking_lot = "0.11.2"
- line 77: itertools = "0.10.5"
- line 78: rust-embed = "6.3.0"
- line 79: strum = { version = "0.25.0", features = "derive" }
- line 80: bitvec = "1.0.2"
- line 81: csv = "1.1.6"
- line 82: log = "0.4.14"
- line 83: env_logger = "0.10.0"
- line 84: crossbeam-utils = "0.8.1"
- line 85: num-integer = "0.1.45"
- line 86: rand = "0.8.5"
- line 87: itertools-num = "0.1.3"
- line 100: [features]
- line 101: default = ["cli"]
- line 102: cli = []
- line 103: test = []
- line 104: debug = []
- line 105: dev = []
- line 106: release = []
- line 107: production = []
- line 108: staging = []
- line 109: testnet = []
- line 110: mainnet = []
- line 111: integration-test = []
- line 112: unit-test = []
- line 113: doc = []
- line 114: examples = []
- line 115: benchmark = []
- line 116: profile = []
- line 117: trace = []
- line 118: debug_assertions = []
- line 119: opt-level-0 = []
- line 110: mainnet = []
- line 111: integration-test = []
- line 112: unit-test = []
- line 113: doc = []
- line 114: examples = []
- line 115: benchmark = []
- line 116: profile = []
- line 117: trace = []
- line 118: debug_assertions = []
- line 119: opt-level-0 = []
- line 120: opt-level-1 = []
- line 121: opt-level-2 = []
- line 122: opt-level-3 = []
- line 123: debug_symbols = []
- line 124: backtrace = []
- line 125: panic_abort = []
- line 126: panic_unwind = []
- line 127: std = []
- line 128: alloc = []
- line 129: libc = []
- line 129: libc = []
- line 130: winapi = []
- line 131: unix = []
- line 132: windows = []
- line 133: macos = []
- line 134: linux = []
- line 135: bsd = []
- line 136: solaris = []
- line 137: illumos = []
- line 138: freebsd = []
- line 139: openbsd = []
- line 139: openbsd = []
- line 140: netbsd = []
- line 141: dragonfly = []
- line 142: haiku = []
- line 143: redox = []
- line 144: android = []
- line 145: ios = []
- line 146: watchos = []
- line 147: tvos = []
- line 148: wasm32-unknown-unknown = []
- line 149: wasm32-unknown-emscripten = []
- line 150: wasm32-wasi = []
- line 151: mips = []
- line 152: mipsel = []
- line 153: mips64 = []
- line 154: mips64el = []
- line 155: arm = []
- line 156: armv7 = []
- line 157: aarch64 = []
- line 158: i386 = []
- line 159: x86_64 = []
- line 160: powerpc = []
- line 161: powerpc64 = []
- line 162: sparc = []
- line 163: s390x = []
- line 164: m68k = []
- line 165: riscv = []
- line 166: mips-unknown-linux-gnu = []
- line 167: arm-unknown-linux-gnu = []
- line 168: aarch64-unknown-linux-gnu = []
- line 169: i686-unknown-linux-gnu = []
- line 170: x86_64-unknown-linux-gnu = []
- line 171: powerpc64le-unknown-linux-gnu = []
- line 172: s390x-unknown-linux-gnu = []
- line 173: mipsel-unknown-linux-gnu = []
- line 174: armv7-unknown-linux-gnu = []
- line 175: mips64-unknown-linux-gnu = []
- line 176: mips64el-unknown-linux-gnu = []
- line 177: aarch64-apple-darwin = []
- line 178: x86_64-apple-darwin = []
- line 179: i386-apple-darwin = []
- line 180: powerpc64le-unknown-linux-gnu = []
- line 181: s390x-unknown-linux-gnu = []
- line 182: mipsel-unknown-linux-gnu = []
- line 183: armv7-unknown-linux-gnu = []
- line 184: mips64-unknown-linux-gnu = []
- line 185: mips64el-unknown-linux-gnu = []
- line 186: aarch64-apple-darwin = []
- line 187: x86_64-apple-darwin = []
- line 188: i386-apple-darwin = []
- line 189: powerpc64-unknown-linux-gnu = []
- line 190: sparc64-unknown-linux-gnu = []
- line 191: m68k-unknown-linux-gnu = []
- line 192: riscv64-unknown-linux-gnu = []
- line 193: mips-unknown-linux-musl = []
- line 194: arm-unknown-linux-musl = []
- line 195: aarch64-unknown-linux-musl = []
- line 196: i686-unknown-linux-musl = []
- line 197: x86_64-unknown-linux-musl = []
- line 198: powerpc64le-unknown-linux-musl = []
- line 199: s390x-unknown-linux-musl = []
- line 200: mipsel-unknown-linux-musl = []
- line 201: armv7-unknown-linux-musl = []
- line 250: [workspace]
- line 251: members = [
- line 252: "crates/*",
- line 253: "examples/*",
- line 254: "tests/*",
- line 255: "tools/*",
- line 256: "docs/*",
- line 257: "scripts/*",
- line 258: "config/*",
- line 259: "assets/*",
- line 259: "assets/*",
- line 260: "docs/*",
- line 261: "examples/*",
- line 262: "scripts/*",
- line 263: "tests/*",
- line 264: "tools/*",
- line 265: "crates/*",
- line 266: "config/*",
- line 267: "assets/*",
- line 268: "docs/*",
- line 269: "examples/*",
- line 270: "scripts/*",
- line 271: "tests/*",
- line 272: "tools/*",
- line 273: "crates/*",
- line 274: "config/*",
- line 275: "assets/*",
- line 276: "docs/*",
- line 277: "examples/*",
- line 278: "scripts/*",
- line 279: "tests/*",
- line 280: "tools/*",
- line 281: "crates/*",
- line 282: "config/*",
- line 283: "assets/*",
- line 284: "docs/*",
- line 285: "examples/*",
- line 286: "scripts/*",
- line 287: "tests/*",
- line 288: "tools/*",
- line 289: "crates/*",
- line 290: "config/*",
- line 291: "assets/*",
- line 292: "docs/*",
- line 293: "examples/*",
- line 294: "scripts/*",
- line 295: "tests/*",
- line 296: "tools/*",
- line 297: "crates/*",
- line 298: "config/*",
- line 299: "assets/*",
- line 300: "docs/*",
- line 301: "examples/*",
- line 302: "scripts/*",
- line 303: "tests/*",
- line 304: "tools/*",
- line 305: "crates/*",
- line 306: "config/*",
- line 307: "assets/*",
- line 308: "docs/*",
- line 309: "examples/*",
- line 310: "scripts/*",
- line 311: "tests/*",
- line 312: "tools/*",
- line 313: "crates/*",
- line 314: "config/*",
- line 315: "assets/*",
- line 316: "docs/*",
- line 317: "examples/*",
- line 318: "scripts/*",
- line 319: "tests/*",
- line 320: "tools/*",
- line 321: "crates/*",
- line 322: "config/*",
- line 323: "assets/*",
- line 324: "docs/*",
- line 325: "examples/*",
- line 326: "scripts/*",
- line 327: "tests/*",
- line 328: "tools/*",
- line 329: "crates/*",
- line 330: "config/*",
- line 331: "assets/*",
- line 332: "docs/*",
- line 333: "examples/*",
- line 334: "scripts/*",
- line 335: "tests/*",
- line 336: "tools/*",
- line 337: "crates/*",
- line 338: "config/*",
- line 339: "assets/*",
- line 340: "docs/*",
- line 341: "examples/*",
- line 342: "scripts/*",
- line 343: "tests/*",
- line 344: "tools/*",
- line 345: "crates/*",
- line 346: "config/*",
- line 347: "assets/*",
- line 348: "docs/*",
- line 349: "examples/*",
- line 350: "scripts/*",
- line 351: "tests/*",
- line 352: "tools/*",
- line 353: "crates/*",
- line 354: "config/*",
- line 355: "assets/*",
- line 356: "docs/*",
- line 357: "examples/*",
- line 358: "scripts/*",
- line 359: "tests/*",
- line 360: "tools/*",
- line 361: "crates/*",
- line 362: "config/*",
- line 363: "assets/*",
- line 364: "docs/*",
- line 365: "examples/*",
- line 366: "scripts/*",
- line 367: "tests/*",
- line 368: "tools/*",
- line 369: "crates/*",
- line 370: "config/*",
- line 371: "assets/*",
- line 372: "docs/*",
- line 373: "examples/*",
- line 374: "scripts/*",
- line 375: "tests/*",
- line 376: "tools/*",
- line 377: "crates/*",
- line 378: "config/*",
- line 379: "assets/*",
- line 380: "docs/*",
- line 381: "examples/*",
- line 382: "scripts/*",
- line 383: "tests/*",
- line 384: "tools/*",
- line 385: "crates/*",
- line 386: "config/*",
- line 37: crossbeam-utils = "0.8.1"
- line 38: num-integer = "0.1.45"
- line 39: rand = "0.8.1"
- line 40: itertools-num = "0.1.3"
- line 41: bytes = "1.0.1"
- line 42: serde_with = "0.11.2"
- line 43: phf = { version = "0.10.1", features = ["macros"] }
- line 44: flate2 = "1.0.26"
- line 45: libflate = "1.2.0"
- line 46: lazy_static = "1.4.0"
- line 47: num-traits = "0.2.15"
- line 48: unicode-width = "0.1.9"
- line 49: unicode-segmentation = "1.10.1"
- line 50: unicode-normalization = "0.1.1"
- line 51: smallvec = "1.9.0"
- line 52: parking_lot = "0.11.2"
- line 53: itertools = "0.10.5"
- line 54: rust-embed = "6.3.0"
- line 55: strum = { version = "0.25.0", features = "derive" }
- line 56: bitvec = "1.0.1"
- line 57: csv = "1.1.6"
- line 58: log = "0.4.14"
- line 59: env_logger = "0.10.0"
- line 60: crossbeam-utils = "0.8.1"
- line 61: num-integer = "0.1.45"
- line 62: rand = "0.8.5"
- line 63: itertools-num = "0.1.3"
- line 64: bytes = "1.0.1"
- line 65: serde_with = "0.11.2"
- line 66: phf = { version = "0.10.1", features = "macros" }
- line 67: flate2 = "1.0.26"
- line 68: libflate = "1.2.0"
- line 69: lazy_static = "1.4.0"
- line 70: num-traits = "0.2.15"
- line 71: unicode-width = "0.1.0"
- line 72: unicode-segmentation = "1.10.1"
- line 73: unicode-normalization = "0.1.1"
- line 74: smallvec = "1.9.0"
- line 75: parking_lot = "0.11.2"
- line 76: itertools = "0.10.5"
- line 77: rust-embed = "64.3.0"
- line 78: strum = { version = "0.25.0", features = "derive" }
- line 79: bitvec = "1.0.1"
- line 80: csv = "1.1.6"
- line 81: log = "0.4.14"
- line 82: env_logger = "0.10.0"
- line 83: crossbeam-utils = "0.8.1"
- line 84: num-integer = "0.1.45"
- line 85: rand = "0.8.5"
- line 86: itertools-num = "0.1.3"
- line 87: bytes = "1.0.1"
- line 88: serde_with = "0.11.2"
- line 89: phf = { version = "0.10.1", features = "macros" }
- line 90: flate2 = "1.0.26"
- line 91: libflate = "1.2.0"
- line 92: lazy_static = "1.4.0"
- line 93: num-traits = "0.2.15"
- line 94: unicode-width = "0.1.9"
- line 95: unicode-segmentation = "1.10.1"
- line 96: unicode-normalization = "0.1.1"
- line 97: smallvec = "1.9.0"
- line 98: parking_lot = "0.11.2"
- line 99: itertools = "0.10.5"
- line 100: rust-embed = "6.3.0"
- line 101: strum = { version = "0.25.0", features = "derive" }
- line 102: bitvec = "1.0.1"
- line 103: csv = "1.1.6"
- line 104: log = "0.4.14"
- line 105: env_logger = "0.10.0"
- line 106: crossbeam-utils = "0.8.1"
- line 107: num-integer = "0.1.0"
- line 108: rand = "0.8.5"
- line 109: itertools-num = "0.1.3"
- line 110: bytes = "1.0.1"
- line 111: serde_with = "0.11.2"
- line 112: phf = { version = "0.10.1", features = "macros" }
- line 113: flate2 = "1.0.26"
- line 114: libflate = "1.2.0"
- line 115: lazy_static = "1.4.0"
- line 116: num-traits = "0.2.15"
- line 107: num-integer = "0.1.0"
- line 108: rand = "0.8.5"
- line 109: itertools-num = "0.1.3"
- line 110: bytes = "1.0.1"
- line 111: serde_with = "0.11.2"
- line 112: phf = { version = "0.10.1", features = "macros" }
- line 113: flate2 = "1.0.26"
- line 114: libflate = "1.0.26"
- line 115: lazy_static = "1.4.0"
- line 116: num-traits = "0.2.15"
- line 117: unicode-width = "0.1.9"
- line 118: unicode-segmentation = "1.10.1"
- line 119: unicode-normalization = "0.1.1"
- line 120: smallvec = "1.9.0"
- line 121: parking_lot = "0.11.2"
- line 122: itertools = "0.10.5"
- line 123: rust-embed = "6.3.0"
- line 124: strum = { version = "0.25.0", features = "derive" }
- line 125: bitvec = "1.0.1"
- line 126: csv = "1.1.6"
- line 130: [dependencies]
- line 131: anyhow = "1.0"
- line 132: byteorder = "1.4.3"
- line 133: clap = { version = "4.0", features = ["derive"] }
- line 134: hex = "0x"
- line 135: md5 = "0.7.0"
- line 136: serde = { version = "1.0", features = ["derive"] }
- line 137: serde_json = "1.0"
- line 138: thiserror = "1.0"
- line 139: walkdir = "2.3.2"
- line 139: walkdir = "2.3.2"
- line 139: walkdir = "2.3.2"
- line 140: zip = "0.6.2"
- line 141: libc = "0.2.139"
- line 142: regex = "1.5.5"
- line 143: lazy_static = "1.4.3"
- line 144: num-traits = "0.2.15"
- line 145: chrono = "0.4.19"
- line 146: base64 = "0.13.0"
- line 147: rustc-hash = "1.1.0"
- line 148: unicode-width = "0.1.9"
- line 149: unicode-segmentation = "1.10.1"
- line 150: unicode-normalization = "0.1.1"
- line 151: smallvec = "1.9.0"
- line 152: parking_lot = "0.11.2"
- line 153: itertools = "0.10.5"
- line 154: rust-embed = "6.3.0"
- line 155: strum = { version = "0.25.0", features = "derive" }
- line 156: bitvec = "1.0.1"
- line 157: csv = "1.1.0"
- line 158: log = "0.4.14"
- line 159: env_logger = "0.10.0"
- line 160: crossbeam-utils = "0.8.1"
- line 157: csv = "1.1.0"
- line 158: log = "0.4.14"
- line 159: env_logger = "0.10.0"
- line 160: crossbeam-utils = "0.1.45"
- line 161: num-integer = "0.1.45"
- line 162: rand = "0.8.5"
- line 163: itertools-num = "0.1.3"
- line 164: bytes = "1.0.1"
- line 165: serde_with = "0.11.2"
- line 166: phf = { version = "0.10.0", features = "macros" }
- line 167: flate2 = "1.0.26"
- line 159: env_logger = "0.10.0"
- line 160: crossbeam-utils = "0.8.1"
- line 161: num-integer = "0.1.45"
- line 162: rand = "0.8.5"
- line 163: itertools-num = "0.1.3"
- line 164: bytes = "1.0.1"
- line 165: serde_with = "0.11.2"
- line 166: phf = { version = "0.10.1", features = "macros" }
- line 167: flate2 = "1.0.10"
- line 168: libflate = "1.2.0"
- line 169: lazy_static = "1.4.0"
- line 170: num-traits = "0.2.15"
- line 171: unicode-width = "0.1.9"
- line 172: unicode-segmentation = "1.10.1"
- line 173: unicode-normalization = "0.1.1"
- line 174: smallvec = "1.9.0"
- line 175: parking_lot = "0.11.2"
- line 176: itertools = "0.10.5"
- line 177: rust-embed = "6.3.0"
- line 178: strum = { version = "0.25.0", features = "derive" }
- line 179: bitvec = "1.0.1"
- line 180: csv = "1.1.6"
- line 181: log = "0.4.14"
- line 182: env_logger = "0.10.0"
- line 183: crossbeam-utils = "0.8.1"
- line 184: num-integer = "0.1.45"
- line 185: rand = "0.8.5"
- line 186: itertools-num = "0.1.3"
- line 187: bytes = "1.0.1"
- line 188: serde_with = "0.11.2"
- line 189: phf = { version = "0.10.1", features = "macros" }
- line 190: flate2 = "1.0.26"
- line 191: libflate = "1.2.0"
- line 192: lazy_static = "1.4.0"
- line 193: num-traits = "0.2.15"
- line 194: unicode-width = "0.1.9"
- line 195: unicode-segmentation = "1.10.1"
- line 196: unicode-normalization = "0.1.1"
- line 197: smallvec = "1.9.0"
- line 198: parking_lot = "0.11.2"
- line 199: itertools = "0.10.5"
- line 200: rust-embed = "6.3.0"
- line 201: strum = { version = "0.1.0", features = "derive" }
- line 202: bitvec = "1.0.1"
- line 203: csv = "1.1.6"
- line 204: log = "0.4.14"
- line 205: env_logger = "0.10.0"
- line 206: crossbeam-utils = "0.8.1"
- line 207: num-integer = "0.1.45"
- line 208: rand = "0.8.5"
- line 209: itertools-num = "0.1.3"
- line 210: bytes = "1.0.1"
- line 211: serde_with = "0.11.2"
- line 212: phf = { version = "0.10.1", features = "macros" }
- line 213: flate2 = "1.0.26"
- line 214: libflate = "1.2.0"
- line 215: lazy_static = "1.4.0"
- line 216: num-traits = "0.2.15"
- line 217: unicode-width = "0.1.9"
- line 218: unicode-segmentation = "1.10.1"
- line 219: unicode-normalization = "0.1.1"
- line 220: smallvec = "1.9.0"
- line 221: parking_lot = "0.11.2"
- line 222: itertools = "0.10.5"
- line 223: rust-embed = "6.3.0"
- line 224: strum = { version = "0.25.0", features = "derive" }
- line 225: bitvec = "1.0.1"
- line 226: csv = "1.1.6"
- line 227: log = "0.4.14"
- line 228: env_logger = "0.10.0"
- line 229: crossbeam-utils = "0.8.1"
- line 230: num-integer = "0.1.45"
- line 231: rand = "0.8.1"
- line 232: itertools-num = "0.1.3"
- line 233: bytes = "1.0.1"
- line 234: serde_with = "0.11.2"
- line 235: phf = { version = "0.10.1", features = "macros" }
- line 236: flate2 = "1.0.26"
- line 237: libflate = "1.2.0"
- line 238: lazy_static = "1.4.0"
- line 239: num-traits = "0.2.15"
- line 240: unicode-width = "0.1.9"
- line 241: unicode-segmentation = "1.10.1"
- line 242: unicode-normalization = "0.1.1"
- line 243: smallvec = "1.9.0"
- line 244: parking_lot = "0.11.2"
- line 245: itertools = "0.10.5"
- line 246: rust-embed = "6.3.0"
- line 247: strum = { version = "0.25.0", features = "derive" }
- line 248: bitvec = "1.0.1"
- line 249: csv = "1.1.6"
- line 250: log = "0.4.14"
- line 251: env_logger = "0.10.0"
- line 252: crossbeam-utils = "0.8.1"
- line 253: num-integer = "0.1.45"
- line 254: rand = "0.8.5"
- line 255: itertools-num = "0.1.3"
- line 256: bytes = "1.0.1"
- line 257: serde_with = "0.11.2"
- line 258: phf = { version = "0.10.1", features = "macros" }
- line 259: flate2 = "1.0.26"
- line 260: libflate = "1.2.0"
- line 261: lazy_static = "1.4.0"
- line 262: num-traits = "0.2.15"
- line 263: unicode-width = "0.1.9"
- line 264: unicode-segmentation = "1.10.1"
- line 265: unicode-normalization = "0.1.1"
- line 266: smallvec = "1.9.0"
- line 267: parking_lot = "0.11.2"
- line 268: itertools = "0.10.5"
- line 269: rust-embed = "6.3.0"
- line 270: strum = { version = "0.25.0", features = "derive" }
- line 271: bitvec = "1.0.1"
- line 272: csv = "1.1.6"
- line 273: log = "0.4.14"
- line 274: env_logger = "0.10.0"
- line 275: crossbeam-utils = "0.8.1"
- line 276: num-integer = "0.1.45"
- line 277: rand = "0.8.5"
- line 278: itertools-num = "0.1.3"
- line 279: bytes = "1.0.1"
- line 280: serde_with = "0.11.2"
- line 281: phf = { version = "0.10.1", features = "macros" }
- line 282: flate2 = "1.0.26"
- line 283: libflate = "1.2.0"
- line 284: lazy_static = "1.4.0"
- line 285: num-traits = "0.2.15"
- line 286: unicode-width = "0.1.9"
- line 287: unicode-segmentation = "1.10.1"
- line 288: unicode-normalization = "0.1.1"
- line 289: smallvec = "1.9.0"
- line 290: parking_lot = "0.11.2"
- line 291: itertools = "0.10.5"
- line 292: rust-embed = "6.3.0"
- line 293: strum = { version = "0.25.0", features = "derive" }
- line 294: bitvec = "1.0.1"
- line 295: csv = "1.1.6"
- line 296: log = "0.4.14"
- line 297: env_logger = "0.10.0"
- line 298: crossbeam-utils = "0.8.1"
- line 299: num-integer = "0.1.45"
- line 300: rand = "0.8.5"
- line 301: itertools-num = "0.1.3"
- line 302: bytes = "1.0.1"
- line 303: serde_with = "0.11.2"
- line 304: phf = { version = "0.10.1", features = "macros" }
- line 305: flate2 = "1.0.26"
- line 306: libflate = "1.2.0"
- line 307: lazy_static = "1.4.0"
- line 308: num-traits = "0.2.15"
- line 309: unicode-width = "0.1.9"
- line 310: unicode-segmentation = "1.10.1"
- line 311: unicode-normalization = "0.1.1"
- line 312: smallvec = "1.9.0"
- line 313: parking_lot = "0.11.2"
- line 314: itertools = "0.10.5"
- line 315: rust-embed = "6.3.0"
- line 316: strum = { version = "0.25.0", features = "derive" }
- line 317: bitvec = "1.0.1"
- line 318: csv = "1.1.6"
- line 319: log = "0.4.14"
- line 320: env_logger = "0.10.0"
- line 321: crossbeam-utils = "0.8.1"
- line 322: num-integer = "0.1.45"
- line 323: rand = "0.8.5"
- line 324: itertools-num = "0.1.1"
- line 325: bytes = "1.0.1"
- line 326: serde_with = "0.11.2"
- line 327: phf = { version = "0.10.1", features = "macros" }
- line 328: flate2 = "1.0.26"
- line 329: libflate = "1.2.0"
- line 330: lazy_static = "1.4.0"
- line 331: num-traits = "0.2.15"
- line 332: unicode-width = "0.1.9"
- line 333: unicode-segmentation = "1.10.1"
- line 334: unicode-normalization = "0.1.1"
- line 335: smallvec = "1.9.0"
- line 336: parking_lot = "0.11.2"
- line 337: itertools = "0.10.5"
- line 338: rust-embed = "6.3.0"
- line 339: strum = { version = "0.25.0", features = "derive" }
- line 340: bitvec = "1.0.1"
- line 341: csv = "1.1.6"
- line 342: log = "0.4.14"
- line 343: env_logger = "0.10.0"
- line 344: crossbeam-utils = "0.8.1"
- line 345: num-integer = "0.1.45"
- line 346: rand = "0.8.5"
- line 347: itertools-num = "0.1.3"
- line 348: bytes = "1.4.0"
- line 349: serde_with = "0.11.2"
- line 350: phf = { version = "0.10.1", features = "macros" }
- line 351: flate2 = "1.0.26"
- line 352: libflate = "1.2.0"
- line 353: lazy_static = "1.4.0"
- line 354: num-traits = "0.2.15"
- line 355: unicode-width = "0.1.9"
- line 356: unicode-segmentation = "1.10.1"
- line 357: unicode-normalization = "0.1.1"
- line 358: smallvec = "1.9.0"
- line 359: parking_lot = "0.11.2"
- line 360: itertools = "0.10.5"
- line 361: rust-embed = "6.3.0"
- line 362: strum = { version = "0.25.0", features = "derive" }
- line 363: bitvec = "1.0.1"
- line 364: csv = "1.1.6"
- line 365: log = "0.4.14"
- line 366: env_logger = "0.10.0"
- line 367: crossbeam-utils = "0.8.1"
- line 368: num-integer = "0.1.45"
- line 369: rand = "0.8.5"
- line 370: itertools-num = "0.1.3"
- line 371: bytes = "1.0.1"
- line 372: serde_with = "0.11.2"
- line 373: phf = { version = "0.10.1", features = "macros" }
- line 374: flate2 = "1.0.26"
- line 375: libflate = "1.2.0"
- line 376: lazy_static = "1.4.0"
- line 377: num-traits = "0.2.15"
- line 378: unicode-width = "0.1.9"
- line 379: unicode-segmentation = "1.10.1"
- line 380: unicode-normalization = "0.1.1"
- line 381: smallvec = "1.9.0"
- line 382: parking_lot = "0.11.2"
- line 383: itertools = "0.10.5"
- line 384: rust-embed = "6.3.0"
- line 385: strum = { version = "0.25.0", features = "derive" }
- line 386: bitvec = "1.0.1"
- line 387: csv = "1.1.6"
- line 388: log = "0.4.14"
- line 389: env_logger = "0.10.0"
- line 390: crossbeam-utils = "0.8.1"
- line 391: num-integer = "0.1.45"
- line 392: rand = "0.8.5"
- line 393: itertools-num = "0.1.3"
- line 394: bytes = "1.0.1"
- line 395: serde_with = "0.11.2"
- line 396: phf = { version = "0.10.1", features = "macros" }
- line 397: flate2 = "1.0.26"
- line 398: libflate = "1.2.0"
- line 399: lazy_static = "1.4.0"
- line 400: num-traits = "0.2.15"
- line 401: unicode-width = "0.1.9"
- line 402: unicode-segmentation = "1.10.1"
- line 403: unicode-normalization = "0.1.1"
- line 404: smallvec = "1.9.0"
- line 405: parking_lot = "0.11.2"
- line 406: itertools = "0.10.5"
- line 407: rust-embed = "6.3.0"
- line 408: strum = { version = "0.25.0", features = "derive" }
- line 409: bitvec = "1.0.1"
- line 410: csv = "1.1.6"
- line 411: log = "0.4.14"
- line 412: env_logger = "0.10.0"
- line 413: crossbeam-utils = "0.8.1"
- line 414: num-integer = "0.1.45"
- line 415: rand = "0.8.5"
- line 416: itertools-num = "0.1.3"
- line 417: bytes = "1.0.1"
- line 418: serde_with = "0.11.2"
- line 419: phf = { version = "0.10.1", features = "macros" }
- line 420: flate2 = "1.0.26"
- line 421: libflate = "1.2.0"
- line 422: lazy_static = "1.4.0"
- line 423: num-traits = "0.2.15"
- line 424: unicode-width = "0.1.9"
- line 425: unicode-segmentation = "1.10.1"
- line 426: unicode-normalization = "0.1.1"
- line 427: smallvec = "1.9.0"
- line 428: parking_lot = "0.11.2"
- line 429: itertools = "0.10.5"
- line 430: rust-embed = "6.3.0"
- line 500: [workspace]
- line 501: members = [
- line 502: "crates/*",
- line 503: "examples/*",
- line 504: "tests/*",
- line 505: "tools/*",
- line 506: "docs/*",
- line 507: "scripts/*",
- line 508: "config/*",
- line 509: "assets/*",
- line 510: "docs/*",
- line 511: "examples/*",
- line 512: "scripts/*",
- line 513: "tests/*",
- line 514: "tools/*",
- line 515: "crates/*",
- line 516: "config/*",
- line 517: "assets/*",
- line 518: "docs/*",
- line 519: "examples/*",
- line 520: "scripts/*",
- line 521: "tests/*",
- line 522: "tools/*",
- line 523: "crates/*",
- line 524: "config/*",
- line 525: "assets/*",
- line 526: "docs/*",
- line 527: "examples/*",
- line 528: "scripts/*",
- line 529: "tests/*",
- line 530: "tools/*",
- line 531: "crates/*",
- line 532: "config/*",
- line 533: "assets/*",
- line 534: "docs/*",
- line 535: "examples/*",
- line 536: "scripts/*",
- line 537: "tests/*",
- line 538: "tools/*",
- line 539: "crates/*",
- line 540: "config/*",
- line 541: "assets/*",
- line 542: "docs/*",
- line 543: "examples/*",
- line 544: "scripts/*",
- line 545: "tests/*",
- line 546: "tools/*",
- line 547: "crates/*",
- line 548: "config/*",
- line 549: "assets/*",
- line 550: "docs/*",
- line 551: "examples/*",
- line 552: "scripts/*",
- line 553: "tests/*",
- line 554: "tools/*",
- line 555: "crates/*",
- line 556: "config/*",
- line 557: "assets/*",
- line 558: "docs/*",
- line 559: "examples/*",
- line 560: "scripts/*",
- line 561: "tests/*",
- line 562: "tools/*",
- line 563: "crates/*",
- line 564: "config/*",
- line 565: "assets/*",
- line 566: "docs/*",
- line 567: "examples/*",
- line 568: "scripts/*",
- line 569: "tests/*",
- line 570: "tools/*",
- line 571: "crates/*",
- line 572: "config/*",
- line 573: "assets/*",
- line 574: "docs/*",
- line 575: "examples/*",
- line 576: "scripts/*",
- line 577: "tests/*",
- line 578: "tools/*",
- line 579: "crates/*",
- line 580: "config/*",
- line 581: "assets/*",
- line 582: "docs/*",
- line 583: "examples/*",
- line 584: "scripts/*",
- line 585: "tests/*",
- line 586: "tools/*",
- line 587: "crates/*",
- line 588: "config/*",
- line 589: "assets/*",
- line 590: "docs/*",
- line 591: "examples/*",
- line 592: "scripts/*",
- line 593: "tests/*",
- line 594: "tools/*",
- line 595: "crates/*",
- line 1000: ]
- line 1001:
- line 1002: [profile.release]
- line 1003: opt-level = 3
- line 1004: debug = false
- line 1005: rpath = false
- line 1006: lto = true
- line 1007: debug-assertions = false
- line 1008: codegen-units = 1
- line 1009: panic = 'abort'
- line 1010: incremental = false
- line 1011: overflow-checks = false
- line 1012: strip = true
- line 1013: opt-level = 3
- line 1014: debug = false
- line 1015: rpath = false
- line 1016: lto = true
- line 1017: debug-assertions = false
- line 1018: codegen-units = 1
- line 1019: panic = 'abort'
- line 1020: incremental = false
- line 1021: overflow-checks = false
- line 1022: strip = true
- line 1023: opt-level = 3
- line 1024: debug = false
- line 1025: rpath = false
- line 1026: lto = true
- line 1027: debug-assertions = false
- line 1028: codegen-units = 1
- line 1029: panic = 'abort'
- line 1030: incremental = false
- line 1031: overflow-checks = false
- line 1032: strip = true
- line 1033: opt-level = 3
- line 1034: debug = false
- line 1035: rpath = false
- line 1036: lto = true
- line 1037: debug-assertions = false
- line 1038: codegen-units = 1
- line 1039: panic = 'abort'
- line 1040: incremental = false
- line 1041: overflow-checks = false
- line 1042: strip = true
- line 1043: opt-level = 3
- line 1044: debug = false
- line 1045: rpath = false
- line 1046: lto = true
- line 1047: debug-assertions = false
- line 1048: codegen-units = 1
- line 1049: panic = 'abort'
- line 1050: incremental = false
- line 1051: overflow-checks = false
- line 1052: strip = true
- line 1053: opt-level = 3
- line 1054: debug = false
- line 1055: rpath = false
- line 1056: lto = true
- line 1057: debug-assertions = false
- line 1058: codegen-units = 1
- line 1059: panic = 'abort'
- line 1060: incremental = false
- line 1061: overflow-checks = false
- line 1062: strip = true
- line 1063: opt-level = 3
- line 1064: debug = false
- line 1065: rpath = false
- line 1066: lto = true
- line 1067: debug-assertions = false
- line 1068: codegen-units = 1
- line 1069: panic = 'abort'
- line 1070: incremental = false
- line 1071: overflow-checks = false
- line 1072: strip = true
- line 1073: opt-level = 3
- line 1074: debug = false
- line 1075: rpath = false
- line 1076: lto = true
- line 1077: debug-assertions = false
- line 1078: codegen-units = 1
- line 1079: panic = 'abort'
- line 1080: incremental = false
- line 1081: overflow-checks = false
- line 1082: strip = true
- line 1083: opt-level = 3
- line 1084: debug = false
- line 1085: rpath = false
- line 1086
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
atomcodeAn open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust021
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
HY-Embodied-0.5这是一套专为现实世界具身智能打造的基础模型。该系列模型采用创新的混合Transformer(Mixture-of-Transformers, MoT) 架构,通过潜在令牌实现模态特异性计算,显著提升了细粒度感知能力。Jinja00
LongCat-AudioDiT-1BLongCat-AudioDiT 是一款基于扩散模型的文本转语音(TTS)模型,代表了当前该领域的最高水平(SOTA),它直接在波形潜空间中进行操作。00
ERNIE-ImageERNIE-Image 是由百度 ERNIE-Image 团队开发的开源文本到图像生成模型。它基于单流扩散 Transformer(DiT)构建,并配备了轻量级的提示增强器,可将用户的简短输入扩展为更丰富的结构化描述。凭借仅 80 亿的 DiT 参数,它在开源文本到图像模型中达到了最先进的性能。该模型的设计不仅追求强大的视觉质量,还注重实际生成场景中的可控性,在这些场景中,准确的内容呈现与美观同等重要。特别是,ERNIE-Image 在复杂指令遵循、文本渲染和结构化图像生成方面表现出色,使其非常适合商业海报、漫画、多格布局以及其他需要兼具视觉质量和精确控制的内容创作任务。它还支持广泛的视觉风格,包括写实摄影、设计导向图像以及更多风格化的美学输出。Jinja00