Japanese release¶
JP uses the same catalog, bundle and master parsers, with a separate version discovery and CDN download path.
The anonymous MasterdataService/Version response provides the master version, Android asset version/hash and
CDN authentication. No player account or login is needed.
Configuration¶
Use your own client addresses and encryption settings. As elsewhere in nnnotes, neither addresses nor keys are built into the package. Add a region table with these settings to your private configuration:
[catalog]
region = "jp"
language = "ja"
[servers.jp]
provider = "jp"
name = "JP"
api = "https://YOUR_API_HOST"
cdn = "https://YOUR_CDN_HOST"
client_version = "YOUR_CURRENT_CLIENT_VERSION"
languages = ["ja"]
apk = "/path/to/jp/base.apk"
master = "/path/to/jp/master"
[paths]
cache = "/path/to/cache"
Keep [bundle] key/nonce_seed and [master] key/iv in your configuration. Master keys are unnecessary when
reading already decoded tables with music-data --decoded-master.
provider defaults to jp for the region named jp, and to international otherwise. An alias such as
servers.japan needs provider = "jp". client_version overrides [client] version; when neither is set,
nnnotes reads the APK versionName. Use the current accepted JP client version: an old extracted APK can still
contain readable local data even when its version is no longer accepted by the API.
The cdn setting is also the allowed CDN origin for authentication. A different origin in Version fails before
any authenticated download. The JP transport uses HTTPS, follows no redirects, keeps authentication in memory,
and refreshes it once on 401/403. A 429 does not cause an authentication-refresh loop. Credentials are not written
to catalog metadata or task files.
APKs and split data¶
apk accepts:
- a normal APK;
base.apkwith adjacentsplit_*.apk/config.*.apkfiles;- a directory containing
base.apkand its splits; - an
.apksor.xapkarchive containingbase.apkand its splits.
JP stores boot data in base.apk and the embedded catalog/master/bundles in the Unity data split. Both are read
through the same APK-set interface. datapack.unity3d is loaded alongside data.unity3d for external resources
such as materials and shaders. Native libraries are also read from the splits. No repacked APK is required.
[servers.<region>] apk and catalog override their [paths] equivalents; explicit --apk / --catalog flags
still win. For mixed-release chart builds, configure separate master directories and APK sets. JP stories and
models must use a separate site directory from international releases, since their model IDs may overlap.
Commands¶
nnnotes --region jp master version
nnnotes --region jp master download --latest -o work/jp-master-bin
nnnotes master decode work/jp-master-bin -o work/jp-master
nnnotes --region jp catalog keys --prefix Live/MusicScore/ --limit 10
nnnotes --region jp bundle pull Live/MusicScore/0001/0001_00
nnnotes --region jp catalog fetch
nnnotes --region jp export assets --select key:Image/Jacket/jacket_temporary --views none -o out/jp-sample
nnnotes --region jp music-data --decoded-master --no-bgm -o out/jp-music-data.json
For --decoded-master, keep MasterManifest.json with the decoded tables (copy it from the download directory,
or use a snapshot from your masterdata service). --no-bgm omits song audio length inspection; omit that flag to
include it. master version reports resourceHash for JP as well as the two version fields. music-data records
the JP hash in provenance.catalog.resourceHash.
JP catalogs are catalog_main.bin in a version/hash directory, without a language suffix. The HTTP payload can
be gzip; nnnotes keeps its original bytes and SHA-256, and bounds decompression before parsing. Remote bundle and
CRI locations use {Fwk.Resource.RemoteAssetDir}. These are indexed, resolved and downloaded through the selected
snapshot, including in catalog browse, the other catalog commands, export assets, store plan and
store run.
The cache lives under <cache>/jp/<CDN-origin-digest>/<asset-version>/<asset-hash>/. It cannot reuse the
international catalog cache. Embedded files are further isolated under apk/<APK-catalog-SHA256>/, so an APK
update cannot reuse old local bundles when the CDN snapshot stays unchanged. Each cached catalog_main.bin has a catalog_main.bin.source.json with its SHA-256
and public source metadata. For an offline --catalog or catalog import, copy the pair together. Credentials
are reacquired only when a missing file must be downloaded.
Catalog database records include this source metadata, and JP catalog identity includes version/hash even when the catalog bytes remain the same. Old international records retain their previous IDs. Cached historical files can be read offline; downloading a missing historical file fails if Version now selects a different snapshot. Refresh the catalog to use the new snapshot. Historical local bundles require the APK set matching the imported APK catalog. A JP master download likewise rejects a different current master snapshot.
Validation and current limits¶
The synthetic tests use local gRPC and HTTP servers, including gzip catalogs, split packages, authentication rotation, redirects, 429, truncated responses, source isolation, APK-only and hash-only updates, offline replay and invalid paths.
A validation run with JP client 1.0.4 and JP Android 1.0.3 data gave:
- 238 master tables downloaded with manifest hashes and decoded successfully;
- a 73-note chart and a 512×512 jacket read successfully;
- one Live2D runtime model and one complete story exported; the story's 22 FLAC files passed full FFmpeg decoding;
- selected
export assetsproduced six files without failed tasks; music-data --decoded-master --no-bgmbuilt 85 songs / 340 charts, including the pinned deck model's statistics, with no unplayable chart; output passed JSON Schema validation.
This does not establish full JP story/Live2D/movie export coverage, browser playback, every BGM, or native scoring
parity. JP's text tables retain five language columns, but most translated values are empty; story web builds
default to Japanese. Existing Bili chat skin view rules still refer to international _iconAssetPath fields;
JP rows with a different schema report no-value and are not represented as verified skin mappings.