English | 中文说明
Single-file SQLite preservation database for Nintendo Pokémon Mini. The public Catalog holds metadata only (checksums, DAT and provenance records, header fields, archive recipes and the processing code); it contains no ROM data and cannot restore files. The populated database stays local.
| Item | Value |
|---|---|
| Original size | 101 source ZIPs, 8.9 MiB (No-Intro 50, RetroAchievements sets 51); 101 ROM files, 35.9 MiB uncompressed |
| Stored size | populated database 5.1 MiB; public Catalog 2.2 MiB (no ROM data) |
| Ratio | 57.3% of the source ZIPs, 14.2% of the uncompressed ROM files |
| Technology | storage v4: SHA256-deduplicated 256 KiB blocks packed in No-Intro family order into solid LZMA2 groups of up to 32 MiB (32 MiB dictionary); per-block SHA256 and per-object CRC32/MD5/SHA1/SHA256 verification; source ZIPs reproduced byte-for-byte from TorrentZip plans |
| Export performance | Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz, idle, Python 3.14.4, all checks included. whole newest-DAT set with export_set.py (46 files, each checked against the DAT hashes): 47.6 MiB/s, 10 ms per file on average; single file with a cold cache (the group is decoded up to the file): ROM 0.074 s, TorrentZip 0.118 s on average |
| File / document | Content |
|---|---|
| RetroBoxDB.PokemonMini.Catalog.sqlite | Public Catalog (Release asset with SHA256SUMS) |
| Storage v4 guide / 中文 | Storage evaluation, contents, RA, names and maintenance for every platform |
| Technical design | Storage format, platform adapters, incremental updates, verification |
| RA list / summary, build report, audit resolution | Detailed data |
8 block/group combinations measured on the whole local collection (assessment/data/storage-experiment-pokemini.json): smallest 512 KiB / 32 MiB at 1.53 MiB; by the rule (within 0.5% of the smallest, the smallest block, then the smallest group) 256 KiB / 32 MiB at 1.54 MiB. ZIPs 8.91 MiB, per-file LZMA 5.40 MiB.
- ROMs are 4–512 KiB; the whole collection deduplicates to 23 MiB of unique blocks and compresses to about 1.5 MiB in one group, where 256 KiB blocks need the least metadata within the rule.
- Header at 0x2100:
MN, theNINTENDOstring, a four-character game code (its last letter is the region), a 12-byte title and the2Pflag, stored inpokemini_hardware. - RetroAchievements console 24 (whole-file MD5). The RA folder holds 35 files that No-Intro does not list (homebrew and other dumps); they are stored with block deduplication.
| Item | Value |
|---|---|
| ROM records / games / releases | 83 / 22 / 46 |
| DAT coverage per version | 20260529-125415: 46/46 |
| Local ROMs in no DAT | 37 |
| ROM files of the RetroAchievements set | in a No-Intro DAT 16, RA only 35, hash not in the latest RA snapshot 0 (list); RA games still without a local ROM: gap list |
| No-Intro DB Export + Dump Log 20260529-125415 | 46 archives, 49 file identities, 20 documented hardware assertions; Dump Log Verified 9 |
| RetroAchievements (console 24) | 40 games with achievements: 39 with a local ROM (51 ROMs), 0 with the ROM in a sibling database, 0 DAT only, 0 DB file only, 1 without a No-Intro counterpart |
| Chinese names | 43 of 44 rows translated (17 unique); 43 local ROMs have a Chinese name |
| Populated-database audit | 86 objects, 1 groups, 88 archive plans, all passed |
Every source ZIP is reproduced byte-for-byte from its TorrentZip plan (v_file_checksums.exported_bytes_equal_source).
# Query-only audit with the Catalog's embedded engine (also: stats, checksums FILE_ID, help)
python3 -B -c 'import sqlite3,sys; c=sqlite3.connect(sys.argv[1]); s=c.execute("SELECT content FROM resources WHERE name=?",("engine.py",)).fetchone()[0]; c.close(); exec(compile(s,"RetroBoxDB:engine.py","exec"))' ./RetroBoxDB.PokemonMini.Catalog.sqlite audit
# Populated database: export by DAT version, 1G1R, RA achievements, TorrentZip or plain ROMs
python3 -B tools/export_set.py RetroBoxDB.PokemonMini.sqlite OUT --set 1g1r --ra achievements --container torrentzip --layout ra-category
# Add new DATs, DB Export / Dump Log snapshots, ROMs and an RA snapshot incrementally
python3 -B tools/update_db.py RetroBoxDB.PokemonMini.sqlite --discover --ra --catalog RetroBoxDB.PokemonMini.Catalog.sqlitePython 3.10+ standard library only. engine.py and the other resources entries are executable code; run them only from a database you built or a Release asset whose SHA256 you verified. Releases are produced by .github/workflows/publish-catalog.yml: it starts from the base Catalog pinned in release/catalog-release.json, injects the engine and documents of this commit, checks every data-table digest, runs the tests and the audit, then publishes.