
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Fork notice: This is a fork of MarcTV's Docker CHD Converter. It adds a Web UI and more conversion tools on top of the original CLI converter. Thanks to https://github.com/MarcTV for the original.
A disc image converter that wraps six tools: CHDMAN (MAME), dolphin-tool (Dolphin Emulator), z3ds_compressor (Nintendo 3DS), nsz (Nintendo Switch), maxcso (PSP/PS2 CSO/ZSO), and 7z (handheld ROM archives). Pick the tool that matches your files and convert from a browser, or run it headless from the command line.
| Tool | Platform / Use | Input Formats | Output Formats | Compression Control | External Keys | ***ary |
|---|---|---|---|---|---|---|
| CHDMAN | CD / DVD / HD / LaserDisc discs | .gdi, .cue, .***, .iso, .chd | .chd, .cue, .***, .iso, .raw, .avi | Codec list (zstd, zlib, …) | None | mame-tools |
| Dolphin | GameCube / Wii discs | .iso, .wbfs, .rvz, .wia, .gcz | .rvz, .wia, .gcz, .iso | Codec + numeric level | None | dolphin-emu |
| 3DS | Nintendo 3DS ROMs | .cci, .cia, .3ds, .cxi, .3dsx, .zcci, .zcia, .z3ds, .zcxi, .z3dsx | .zcci, .zcia, .z3ds, .zcxi, .z3dsx, .cci, .cia, .3ds, .cxi, .3dsx | None (fixed) | None | z3ds_compressor |
| Switch | Nintendo Switch dumps | .nsp, .xci, .nsz, .xcz | .nsz, .xcz, .nsp, .xci | Layout + level | Yes (prod.keys) | nsz |
| CSO | PSP / PS2 disc images | .iso, .cso, .zso, .dax | .cso, .zso, .dax, .iso | Effort preset (Fast/Default/Max) | None | maxcso |
| Handheld ROM | Game Boy / GBC / GBA / DS ROMs | .gb, .gbc, .gba, .nds, .7z, .zip | .7z, .zip, .gb, .gbc, .gba, .nds | Effort preset (Fast/Default/Max) | None | 7z (p7zip-full) |
Every conversion above is lossless and fully reversible — including 3DS, which
now decompresses back to the original ROM as well. This uses
https://github.com/pacnpal/z3ds_compress (a fork that adds a
decompression mode and .cxi/.3dsx support to the original
https://github.com/energeticokay/z3ds_compress).
The compressed .z3ds can be read directly by Azahar, or restored to
.cci/.cia/.3ds with z3ds_decompress; see
Nintendo 3DS Support.
Each tool's full mode list (e.g. CHDMAN's createcd/extractcd, CSO's
cso2_compress, the ROM packer's romz_7z/romz_zip/romz_extract) is in
Supported Operations.
Archive inputs: most input formats above can be converted straight from inside a ZIP, 7z, or RAR archive, including 3DS ROMs, Dolphin disc images, and Switch dumps. Browse into the archive, pick a member, and convert. This even covers CHDMAN's extract modes pulling a
.chdout of an archive and decompressing it back to a disc image. Two exceptions: CHDMAN's copy/recompress mode is not offered from an archive (recompressing an already-finished.chdwould be a pointless round trip); and Handheld ROM does not accept loose ROMs from inside an archive — its.7z/.zipare the packed product, so to unpack one select the archive file itself and runromz_extract, rather than browsing into it for a member.
Compressatorium can sync https://github.com/MetalSlug/MAMERedump DAT files (Logiqx XML) in one click and check your compressed files against known-good Redump hashes. The same hashes let tools like https://github.com/gaseous-project/hasheous and https://github.com/rommapp/romm match your library.
MAMEREDUMP_AUTO_SYNC=true to sync DATs on container startup when none are loadeddolphin-tool verify — the same hash MAME Redump records for GameCube/Wii discs — so compressed Dolphin outputs match without the container bytes having to be identical.iso/.bin): Matched via file-level SHA1.iso, and the .bin data track from CHDMAN extract), not just CHDs, so non-CHD libraries get cached match results too. Heavy Dolphin disc-hashing during the scan honors MATCH_MAX_FILE_SIZE and stops pro***ly if you cancel the scan.The Docker image is available from two registries:
bashdocker pull pacnpal/compressatorium
bashdocker pull ghcr.io/pacnpal/compressatorium
Both registries provide identical images with multi-architecture support (linux/amd64 and linux/arm64).
Note: Use either registry: replace
pacnpal/compressatoriumwithghcr.io/pacnpal/compressatoriumfor the same image.
| Tag | Description |
|---|---|
latest | Latest stable release |
beta | Latest pre-release build (see warning below) |
X.Y.Z | Specific stable version (e.g., 3.7.0) |
X.Y.Z-beta-N | Specific pre-release build (e.g., 3.7.0-beta-3) |
sha-xxxxxxx | Specific commit build |
To track pre-release builds, pull the :beta tag instead of :latest:
bashdocker pull pacnpal/compressatorium:beta
Or pin to a specific pre-release (recommended if you want to control when you upgrade):
bashdocker pull pacnpal/compressatorium:3.7.0-beta-3
Warning: beta builds can cause data loss. Pre-releases may carry unfinished migrations, experimental conversion logic, or breaking changes to the job database. Running a beta against a database that a stable release created can corrupt it or migrate it past the point of return, and downgrading back to
:latestafterwards is not supported. Before you pull:beta:
- Back up your SQLite database (
compressatorium.dbin your data volume) and any in-flight output files.- Prefer a separate data volume for beta testing rather than pointing a beta container at your production volume.
- Do not use beta builds for batches you cannot afford to redo.
When you open the Web UI, you'll see the tool options at the top:
Choose the tool that matches your files. The interface then shows only the modes and file types that tool can use.
This is the global guide to the workflow and the features shared by every tool — browsing, modes, compression, verifying/deleting, archives, DAT matching, and troubleshooting. The per-tool sections further down only document what's specific to each tool (its formats, modes, env vars, and quirks). The same material is available in-app under Help.
Your mounted volumes appear in the left panel — click a folder to enter, a
breadcrumb to go back. Search All walks the whole volume and lists every
convertible file at once; the filter dropdown narrows by extension. Both
update automatically as tools are added. System clutter (.DS_Store, AppleDouble
._* files, Thumbs.db, desktop.ini, @eaDir, #recycle, lost+found, …) is
hidden so listings stay clean.
Create makes a compressed file, extract/decompress gives the original back, copy
recompresses in place. Pick the create mode that matches the media — compressing a
PSP/PS2 image with createcd instead of createdvd won't come out right. The
full mode list per tool is in Supported Operations.
Every tool that compresses (CHD, Dolphin, Switch, CSO) shares one compression picker in the convert panel:
zlib,
Dolphin zstd:19, Switch solid:18). See also
Compression Compatibility Tips.By default the output lands next to its source; set a custom output directory instead and it's created for you as long as it's inside a mounted volume. If a matching output already exists the app stops and asks rather than clobbering it: skip keeps the existing file, rename writes under a new name, overwrite replaces it.
Every conversion and verify runs through one FIFO queue — one job at a time by default, which keeps the host responsive during big batches. Progress streams live, and jobs run on the server, so closing the browser (or rebooting your laptop) doesn't stop them; reopen the page and it reconnects. The queue has active / completed / failed tabs, plus Cancel All and Clear Done (both confirm first).
Converting never deletes anything on its own — the safe order is convert, verify,
then delete the source. Verify reads the whole output back and checks it against
the file's own hashes/CRC; with delete-on-verify the source is removed only
after the output passes, and never if it fails. You get a confirmation list of
everything to be deleted first, including the .cue/.gdi track files that ride
with a .bin, and the whole archive if the source came from one. Bulk Verify
checks a whole selection at once across CHD, Dolphin, 3DS, Switch, and CSO;
verification status persists between sessions, and a long verify can be given a
timeout so a stalled one doesn't block the queue.
Click a file to open the inspector — it shows the format/version, compression, size, and hashes, plus the raw tool output. For PS1/PS2/PSP/Dreamcast discs it also digs the game serial out of the sector data and shows a human title when it recognizes one. A background scan caches this so the list badges don't recompute on every folder open.
Sync the MAMERedump DATs from the DAT Library (or import your own .dat/.xml
from No-Intro/Redump) and converted files are checked against known-good hashes —
a blue DAT badge means the file matches. CHDs match on the codec-independent header
SHA1, and Dolphin RVZ/WIA/GCZ match on the disc image's content SHA1 reconstructed by
dolphin-tool verify --algorithm sha1 (the same hash Redump records), so any
compression setting still matches for both. A missing badge usually means the DATs
aren't synced, the title isn't in the DAT, or the file is larger than
MATCH_MAX_FILE_SIZE (which skips the expensive full-disc reconstruction) — not that
the file is bad.
Browse straight into a ZIP, 7z, or RAR and convert a file from inside it — no need
to extract first. The member is unpacked to a temp dir for the conversion and
cleaned up afterwards. Any convertible source works this way (CHD create,
Dolphin, 3DS, Switch, and CSO — Switch still needs your own prod.keys), and
CHDMAN's extract modes can even pull a .chd out of an archive and decompress it
back to a disc image. The exception is CHDMAN's copy/recompress mode: it acts on a
finished .chd, and recompressing one straight out of an archive is a pointless
round trip, so it's not offered there.
Why only certain files show inside an archive
Browsing into an archive does not list everything it contains. It lists the
file types the app knows — every extension that some tool recognizes as a
convertible source (.iso, .cue/.bin, .gdi, .gcz/.wia/.rvz/.wbfs,
.cci/.cia/.3ds/.cxi/.3dsx, .nsp/.xci, .cso/.zso/.dax, the handheld ROMs
.gb/.gbc/.gba/.nds, …) plus a .chd you can decompress in place. Anything
else is hidden, on purpose:
.nfo/.sfv files, box art,
manuals, save states — none of it is something the app can convert or verify, so
it would only be clutter in the browser. The listing is global, scoped to known
extensions: a member shows up if and only if its extension is one the app
understands, regardless of which tool you currently have selected..zip inside a .zip (or .7z/.rar) is not
listed — there's no point browsing an archive within an archive.__MACOSX/… resource forks, .DS_Store,
Thumbs.db and the like never appear, so a ROM zipped on a Mac or Windows box
still reads as a clean single-file archive.Some members that are shown still can't be converted from inside the archive, and the UI badges them non-convertible:
Game.gba inside Game.gba.7z) is shown
so you can see and verify it, but it isn't offered for re-conversion —
recompressing an already-archived ROM would just be packing a .7z into another
.7z. To unpack it, select the archive file itself and run romz_extract..chd inside an archive can be decompressed in place (chdman's extract
modes), but it can't be recompressed — it's already a finished CHD, so chdman's
copy/recompress mode is ***ly not offered from an archive.In short: if a file you expect isn't in the list, it's almost always because its extension isn't one of the convertible/verifiable types the app handles. Loose files on disk follow the same rule — the file list filters to the types the selected tool understands.
zlib only using copy mode (see Compression Compatibility Tips).The web interface is the easiest way to run Compressatorium:
bashdocker run -d \ -p 8080:8080 \ -e PUID=$(id -u) \ -e PGID=$(id -g) \ -v /path/to/config:/config \ -v /path/to/games:/data/games \ pacnpal/compressatorium
Then open http://localhost:8080 in your browser.
Required: The
/configvolume must be mounted for persistent data storage.
Volume discovery: IfCOMPRESSATORIUM_VOLUMESis unset, the app scans/data/*at startup and auto-registers mounted game volumes (restart after mount changes).
Ownership (optional): SetPUID/PGIDto match your host user/group (for example Unraid99:100). If unset, defaults remain999:999.
Default temp location:/config/temp. To use a different location, setCHD_TEMP_DIRand mount it.
Mount multiple game directories for better organization:
bashdocker run -d \ -p 8080:8080 \ -v /path/to/config:/config \ -v /home/user/dreamcast:/data/dreamcast \ -v /home/user/psp:/data/psp \ -v /home/user/ps1:/data/ps1 \ pacnpal/compressatorium
In the Web UI, you can specify a custom output directory for converted CHD, Dolphin, or 3DS outputs instead of placing them alongside the source files. The directory will be created automatically as long as it is within your configured volumes.
The Web UI ships with light and dark themes and is fully responsive from desktop down to phones. Each surface below is shown as a light / dark pair.
Workspace
A three-pane layout: navigation and tool picker on the left, the volume and file browser in the middle, and a live convert panel with the job queue on the right. Selecting a tool (CHDMAN, Dolphin, or 3DS) refilters the file list and the convert options to match.
| Light | Dark |
|---|---|
| !Workspace · CHDMAN, light | !Workspace · CHDMAN, dark |
Batch selection. Tick multiple files and the convert panel arms itself, showing how many sources are queued and a one-click Start conversion.
| Light | Dark |
|---|---|
| !Batch selection, light | !Batch selection, dark |
Dolphin (GameCube / Wii). Compress discs to RVZ, WIA, or GCZ, with a codec and compression-level picker.
| Light | Dark |
|---|---|
| !Dolphin tool, light | !Dolphin tool, dark |
3DS. Compress .cci, .cia, and .3ds ROMs with z3ds_compressor.
| Light | Dark |
|---|---|
| !3DS tool, light | !3DS tool, dark |
Dashboard
An at-a-glance view of the job queue, verification cache, mounted volumes, recent conversions, and quick tool shortcuts.
| Light | Dark |
|---|---|
| !Dashboard, light | !Dashboard, dark |
DAT Library
Import or sync No-Intro / Redump / MAMERedump datasets and match converted files against known-good hashes.
| Light | Dark |
|---|---|
| !DAT Library, light | !DAT Library, dark |
Help
In-app reference for tools, formats, compression, and verification.
| Light | Dark |
|---|---|
| !Help, light | !Help, dark |
Responsive layouts
The interface reflows cleanly across breakpoints:
Desktop (1280px)
!Desktop View
Tablet (768px)
!Tablet View
Mobile (375px)
!Mobile View
On small screens the file list switches to a card layout. Controls use 44 to 48px touch targets, inputs go full width, and the spacing opens up so it stays usable on a phone.
File Browser
Archive Support
.cue/.gdi is present in the same archive folder, .bin entries are suppressed and batch jobs are deduplicated by output path to avoid stalled conversions..chd you can decompress — regardless of which tool is currently selected. That covers CHDMAN (.gdi/.iso/.cue/.bin), Dolphin (.iso/.gcz/.wia/.rvz/.wbfs), 3DS (.cci/.cia/.3ds/.cxi/.3dsx), Switch (.nsp/.xci), CSO (.iso/.cso/.zso/.dax), and Handheld ROM (.gb/.gbc/.gba/.nds). Archive members appear for whichever tool accepts them, exactly like on-disk files..nfo/.sfv, cover art, manuals), nested archives (a .zip inside a .zip), and OS/NAS clutter (__MACOSX/…, .DS_Store, Thumbs.db) are filtered out — they aren't convertible or verifiable, so listing them would only be noise. See Archives → Why only certain files show inside an archive.Game.gba inside Game.gba.7z) is listed for visibility/verification but not offered for re-conversion (recompressing an archived ROM would be recursive); unpack it by selecting the archive and running romz_extract. A .chd inside an archive can be decompressed in place but not recompressed (copy/recompress acts on a finished output). Such members are badged non-convertible..chd would be a pointless round trip — though the extract modes can decompress a .chd straight out of an archive) and Handheld ROM compression, whose .7z/.zip are the packed product.ISO Handling & Dolphin Tools (GameCube/Wii)
.iso, .gcz, .wia, .rvz, .wbfs with dolphin-tool (RVZ/WIA/GCZ/ISO output)Batch Conversion
MAX_CONCURRENT_JOBS=1).cue/.gdi track files)Bulk Operations
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务