nnnotes 0.1.2__tar.gz → 0.1.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nnnotes-0.1.4/CHANGELOG.md +161 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/PKG-INFO +37 -21
- nnnotes-0.1.2/src/nnnotes.egg-info/PKG-INFO → nnnotes-0.1.4/README.en.md +17 -32
- {nnnotes-0.1.2 → nnnotes-0.1.4}/pyproject.toml +11 -10
- nnnotes-0.1.4/rust/Cargo.lock +285 -0
- nnnotes-0.1.4/rust/Cargo.toml +24 -0
- nnnotes-0.1.4/rust/build.rs +33 -0
- nnnotes-0.1.4/rust/rustfmt.toml +2 -0
- nnnotes-0.1.4/rust/src/lib.rs +116 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/__init__.py +1 -1
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/addressables.py +56 -10
- nnnotes-0.1.4/src/nnnotes/apkset.py +103 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/catalog.py +70 -20
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/catalogdb.py +17 -10
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/cli.py +116 -23
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/cli_assets.py +97 -40
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/config.py +42 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/configfile.py +12 -3
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/cri.py +2 -1
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/crikey.py +4 -3
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/crilips.py +2 -1
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/cristages.py +8 -3
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/deckdata.py +76 -75
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/gameapi.py +19 -7
- nnnotes-0.1.4/src/nnnotes/jp.py +294 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/liveaudio.py +2 -2
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/master.py +31 -5
- nnnotes-0.1.4/src/nnnotes/musicdata.py +1146 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/nnnotes.example.toml +15 -2
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/player.py +7 -2
- nnnotes-0.1.4/src/nnnotes/replaydata.py +138 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/storysite.py +2 -0
- nnnotes-0.1.4/src/nnnotes/ui.py +310 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/web.py +23 -3
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/webmodel.py +1 -1
- nnnotes-0.1.2/README.en.md +0 -191
- nnnotes-0.1.2/README.md +0 -144
- nnnotes-0.1.2/setup.cfg +0 -4
- nnnotes-0.1.2/src/nnnotes.egg-info/SOURCES.txt +0 -143
- nnnotes-0.1.2/src/nnnotes.egg-info/dependency_links.txt +0 -1
- nnnotes-0.1.2/src/nnnotes.egg-info/entry_points.txt +0 -2
- nnnotes-0.1.2/src/nnnotes.egg-info/requires.txt +0 -16
- nnnotes-0.1.2/src/nnnotes.egg-info/top_level.txt +0 -1
- nnnotes-0.1.2/tests/test_advvideo.py +0 -522
- nnnotes-0.1.2/tests/test_atom_eval.py +0 -231
- nnnotes-0.1.2/tests/test_atoms_mesh.py +0 -357
- nnnotes-0.1.2/tests/test_atoms_sprite.py +0 -235
- nnnotes-0.1.2/tests/test_atoms_texture.py +0 -272
- nnnotes-0.1.2/tests/test_blob_memo.py +0 -101
- nnnotes-0.1.2/tests/test_cache.py +0 -107
- nnnotes-0.1.2/tests/test_catalog.py +0 -206
- nnnotes-0.1.2/tests/test_catalog_lazy.py +0 -194
- nnnotes-0.1.2/tests/test_catalogdb.py +0 -320
- nnnotes-0.1.2/tests/test_census.py +0 -211
- nnnotes-0.1.2/tests/test_cli.py +0 -373
- nnnotes-0.1.2/tests/test_cli_assets.py +0 -1007
- nnnotes-0.1.2/tests/test_compress.py +0 -67
- nnnotes-0.1.2/tests/test_config.py +0 -193
- nnnotes-0.1.2/tests/test_configfile.py +0 -203
- nnnotes-0.1.2/tests/test_contract.py +0 -240
- nnnotes-0.1.2/tests/test_crilips.py +0 -199
- nnnotes-0.1.2/tests/test_cristages.py +0 -554
- nnnotes-0.1.2/tests/test_deckdata.py +0 -461
- nnnotes-0.1.2/tests/test_gameapi.py +0 -393
- nnnotes-0.1.2/tests/test_goldens.py +0 -125
- nnnotes-0.1.2/tests/test_jsonio.py +0 -45
- nnnotes-0.1.2/tests/test_layout.py +0 -363
- nnnotes-0.1.2/tests/test_link.py +0 -279
- nnnotes-0.1.2/tests/test_live_options.py +0 -298
- nnnotes-0.1.2/tests/test_live_options_web.py +0 -166
- nnnotes-0.1.2/tests/test_master.py +0 -132
- nnnotes-0.1.2/tests/test_mesh_texture_guards.py +0 -94
- nnnotes-0.1.2/tests/test_modelstages.py +0 -422
- nnnotes-0.1.2/tests/test_objexport.py +0 -1016
- nnnotes-0.1.2/tests/test_orchestrate.py +0 -305
- nnnotes-0.1.2/tests/test_pipeline.py +0 -163
- nnnotes-0.1.2/tests/test_plan.py +0 -149
- nnnotes-0.1.2/tests/test_player.py +0 -140
- nnnotes-0.1.2/tests/test_readsets.py +0 -442
- nnnotes-0.1.2/tests/test_regions.py +0 -246
- nnnotes-0.1.2/tests/test_repo.py +0 -50
- nnnotes-0.1.2/tests/test_room.py +0 -392
- nnnotes-0.1.2/tests/test_sniff.py +0 -137
- nnnotes-0.1.2/tests/test_speed_exact.py +0 -534
- nnnotes-0.1.2/tests/test_spot.py +0 -159
- nnnotes-0.1.2/tests/test_stages.py +0 -274
- nnnotes-0.1.2/tests/test_store.py +0 -181
- nnnotes-0.1.2/tests/test_story_closure.py +0 -137
- nnnotes-0.1.2/tests/test_story_fonts.py +0 -842
- nnnotes-0.1.2/tests/test_story_host.py +0 -512
- nnnotes-0.1.2/tests/test_story_kinds.py +0 -100
- nnnotes-0.1.2/tests/test_story_site.py +0 -663
- nnnotes-0.1.2/tests/test_story_ui.py +0 -551
- nnnotes-0.1.2/tests/test_textstyle.py +0 -253
- nnnotes-0.1.2/tests/test_typetrees.py +0 -382
- nnnotes-0.1.2/tests/test_views.py +0 -749
- nnnotes-0.1.2/tests/test_voices.py +0 -756
- nnnotes-0.1.2/tests/test_voices_story.py +0 -541
- nnnotes-0.1.2/tests/test_web.py +0 -277
- nnnotes-0.1.2/tests/test_webmodel.py +0 -716
- {nnnotes-0.1.2 → nnnotes-0.1.4}/LICENSE +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/__main__.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/acb.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/adv.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/advcommand.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/advmedia.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/advscene.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/advui.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/advvideo.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/atoms/__init__.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/atoms/astc.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/atoms/gltf.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/atoms/mesh.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/atoms/png.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/atoms/reader.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/atoms/sniff.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/atoms/sprite.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/atoms/texture.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/cache.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/census.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/compress.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/contract.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/export.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/jsonio.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/languages.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/layout.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/link.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/live.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/live2d.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/livenotes.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/liveoptions.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/livescene.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/liveui.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/modelstages.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/motion.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/objexport.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/orchestrate.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/plan.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/room.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/score.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/shader.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/spot.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/stages.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/store.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/story.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/storyfonts.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/storyhost.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/storyvoices.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/textstyle.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/tmpfont.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/typetrees/6000.3.12f1.json +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/unity.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/viewrules.json +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/views.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/voices.py +0 -0
- {nnnotes-0.1.2 → nnnotes-0.1.4}/src/nnnotes/webaudio.py +0 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are listed here. Versions follow [Semantic Versioning](https://semver.org/).
|
|
4
|
+
|
|
5
|
+
## [0.1.4](https://github.com/MetaSekaiLab/nnnotes/compare/v0.1.3...v0.1.4) - 2026-10-06
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
- **deck-data:** Export character rank experience thresholds ([3abe101](https://github.com/MetaSekaiLab/nnnotes/commit/3abe1017e47d267f77822af949500789c1831ee4))
|
|
10
|
+
- **music-data:** Publish the recommendation engine in the replay manifest ([42098d7](https://github.com/MetaSekaiLab/nnnotes/commit/42098d7bfa538912bbc350beaebfe78f3b04f202))
|
|
11
|
+
- **catalogs:** Record the resource version of an imported catalog ([a9d0bbd](https://github.com/MetaSekaiLab/nnnotes/commit/a9d0bbd034aee00c696979eba3b1f33754b8a237))
|
|
12
|
+
- **music-data:** Take the deck model's WASM release packages as engines ([de34ee2](https://github.com/MetaSekaiLab/nnnotes/commit/de34ee28ec181cac16237aa2751ff38e3bccfd91))
|
|
13
|
+
|
|
14
|
+
### Bug fixes
|
|
15
|
+
|
|
16
|
+
- **deck-data:** Export represented VIP rank identities ([c5d0514](https://github.com/MetaSekaiLab/nnnotes/commit/c5d051454f90c2afc7fb0063485f7dcf5d5a7669))
|
|
17
|
+
- **music-data:** Name the mismatch when an engine package is rejected ([e7fdacd](https://github.com/MetaSekaiLab/nnnotes/commit/e7fdacdd34b80fdf391614f08fd5d7480d33904e))
|
|
18
|
+
|
|
19
|
+
### Documentation
|
|
20
|
+
|
|
21
|
+
- Add a changelog generated by git-cliff ([d601820](https://github.com/MetaSekaiLab/nnnotes/commit/d60182018911d3f1fc236d355185592b2b6ec8ad))
|
|
22
|
+
|
|
23
|
+
### Build
|
|
24
|
+
|
|
25
|
+
- **deck:** Build the deck model from the ournotes-sim crate ([946fb33](https://github.com/MetaSekaiLab/nnnotes/commit/946fb335aef234837c461dfa960f3ce28dc946da))
|
|
26
|
+
- **deck:** Ournotes-deck ddf212b601731f9ab74245119d4408d2746a370c ([9f0ba0e](https://github.com/MetaSekaiLab/nnnotes/commit/9f0ba0e234cc4119682b3be4ebcd85344e618b02))
|
|
27
|
+
- **deck:** Ournotes-deck v0.0.2 ([8a088f4](https://github.com/MetaSekaiLab/nnnotes/commit/8a088f4b7e40a79b3bc111e88c25d0abce397f36))
|
|
28
|
+
|
|
29
|
+
### CI
|
|
30
|
+
|
|
31
|
+
- **commitlint:** Lift the line length limit of bodies and footers ([b9eecd9](https://github.com/MetaSekaiLab/nnnotes/commit/b9eecd91c682011748a3877e311d6ddcfb88000b))
|
|
32
|
+
- Test on Python 3.14 ([5c845eb](https://github.com/MetaSekaiLab/nnnotes/commit/5c845eb365fcc23c36bf724f336ed747ba198057))
|
|
33
|
+
- **deck:** Move create-pull-request to v8, which runs on Node.js 24 ([1e1bb17](https://github.com/MetaSekaiLab/nnnotes/commit/1e1bb179f98dddecb72465949276cbc4fb4e8fd7))
|
|
34
|
+
- **deck:** Dispatch CI and the commit message check on the pin pull request ([3a6bdfc](https://github.com/MetaSekaiLab/nnnotes/commit/3a6bdfc95dd80171724ac313e2aeb5278859a843))
|
|
35
|
+
|
|
36
|
+
## [0.1.3](https://github.com/MetaSekaiLab/nnnotes/compare/v0.1.2...v0.1.3) - 2026-09-30
|
|
37
|
+
|
|
38
|
+
### Features
|
|
39
|
+
|
|
40
|
+
- **songs:** Export every song's metadata and chart facts ([3dae671](https://github.com/MetaSekaiLab/nnnotes/commit/3dae671302ca843c2ce573802e1309b4b85893a2))
|
|
41
|
+
- [**breaking**] One music-data command with the deck model built in ([197b436](https://github.com/MetaSekaiLab/nnnotes/commit/197b436dfccbefa5296fd40fcf5167458ab1406e))
|
|
42
|
+
- **music-data:** Play scenarios: Gekisou off, every rank, the Perfect play ([a03591e](https://github.com/MetaSekaiLab/nnnotes/commit/a03591e7fd4f186df7ddbe161c787c7cad138b41))
|
|
43
|
+
- **music-data:** Read decoded master data with its manifest (--decoded-master) ([12df2a6](https://github.com/MetaSekaiLab/nnnotes/commit/12df2a67b71ade5e41b51e6602d97d6b5733bd99))
|
|
44
|
+
- **jp:** Support Japanese release assets and split APKs ([9bd4452](https://github.com/MetaSekaiLab/nnnotes/commit/9bd4452b262b349cf4ae7b20b4110f532f2ba8d4))
|
|
45
|
+
- **music-data:** The Gekisou catalog, range luck points and the seed set check ([ffaa1bc](https://github.com/MetaSekaiLab/nnnotes/commit/ffaa1bc10eecc2269ffcffb5fa952e166dc1053f))
|
|
46
|
+
- **music-data:** Export and validate single-skill Gekisou aptitude ([35ae7a0](https://github.com/MetaSekaiLab/nnnotes/commit/35ae7a0727934f9f12a8a0b1b650b3a42c6f9a5f))
|
|
47
|
+
- Export versioned Rust replay data with chart statistics ([46b5b09](https://github.com/MetaSekaiLab/nnnotes/commit/46b5b09c7356c27874ee01c610dc295f60b48765))
|
|
48
|
+
- **ui:** Export offline serialized prefab libraries ([0a7344d](https://github.com/MetaSekaiLab/nnnotes/commit/0a7344d09dbeddde36237b8bf63e83bee2159885))
|
|
49
|
+
|
|
50
|
+
### Bug fixes
|
|
51
|
+
|
|
52
|
+
- **jp:** Address review regressions ([5f40d3e](https://github.com/MetaSekaiLab/nnnotes/commit/5f40d3ee2b195b802a97bf4a861e3f64d223d1f6))
|
|
53
|
+
- **catalog:** Select international catalogs by resource version ([15cb3bf](https://github.com/MetaSekaiLab/nnnotes/commit/15cb3bfe079282f2624c5a0eeba757566c7eb5f6))
|
|
54
|
+
- **release:** Preflight wheels and preserve reviewed notes ([b1e12c4](https://github.com/MetaSekaiLab/nnnotes/commit/b1e12c4ab31cfed6cd453e562aeeb66c3821af83))
|
|
55
|
+
|
|
56
|
+
### Build
|
|
57
|
+
|
|
58
|
+
- **deck:** Pin the final Gekisou aptitude implementation ([4881a21](https://github.com/MetaSekaiLab/nnnotes/commit/4881a2183a1d1cef9ecc799f0bf293dbc58469d7))
|
|
59
|
+
|
|
60
|
+
### CI
|
|
61
|
+
|
|
62
|
+
- Move the GitHub Actions to their current majors ([f0038c1](https://github.com/MetaSekaiLab/nnnotes/commit/f0038c15887b2ad8b61ddde320560837dbab1b5f))
|
|
63
|
+
- Run commitlint on Node.js 24, the active LTS ([48b6557](https://github.com/MetaSekaiLab/nnnotes/commit/48b6557490f638f2b37b73dabb8fa175f0cce788))
|
|
64
|
+
|
|
65
|
+
## [0.1.2](https://github.com/MetaSekaiLab/nnnotes/compare/v0.1.1...v0.1.2) - 2026-09-28
|
|
66
|
+
|
|
67
|
+
### Bug fixes
|
|
68
|
+
|
|
69
|
+
- **unity:** Treat a MonoBehaviour with a missing script as classless ([83dd161](https://github.com/MetaSekaiLab/nnnotes/commit/83dd161e7a2af6953e97c56548341ab6839def0c))
|
|
70
|
+
- **room:** Write a valid glTF for a room without geometry ([8465dd5](https://github.com/MetaSekaiLab/nnnotes/commit/8465dd5d89d3a1857d4dcb80b9f5ff8a36895473))
|
|
71
|
+
- **story:** Share a models directory between concurrent story runs ([2051001](https://github.com/MetaSekaiLab/nnnotes/commit/2051001924ecdbb39d6bc6c5d011a9b52d43a188))
|
|
72
|
+
|
|
73
|
+
### Documentation
|
|
74
|
+
|
|
75
|
+
- **readme:** Completion after verifying every story, spot and region ([c4d6740](https://github.com/MetaSekaiLab/nnnotes/commit/c4d67403b434a05f011a247a5c5bf48f52ebb9d1))
|
|
76
|
+
|
|
77
|
+
## [0.1.1](https://github.com/MetaSekaiLab/nnnotes/compare/v0.1.0...v0.1.1) - 2026-09-27
|
|
78
|
+
|
|
79
|
+
### Features
|
|
80
|
+
|
|
81
|
+
- **config:** Write, edit and check the config file ([1f9b1a2](https://github.com/MetaSekaiLab/nnnotes/commit/1f9b1a2ab9ecb1a29a328a88c8dbf351e010597e))
|
|
82
|
+
- **web:** [**breaking**] Store site assets compressed, gzip by default ([e90a46b](https://github.com/MetaSekaiLab/nnnotes/commit/e90a46b19f332e137b0fa49316651e2fb014a464))
|
|
83
|
+
- **story:** [**breaking**] Stories reference their Live2D models instead of embedding them ([510ff98](https://github.com/MetaSekaiLab/nnnotes/commit/510ff98d90d19bee91e6f87f555c5fbb4104e08b))
|
|
84
|
+
|
|
85
|
+
### Bug fixes
|
|
86
|
+
|
|
87
|
+
- **room:** Share equal images and key objects by their file ([a8af00a](https://github.com/MetaSekaiLab/nnnotes/commit/a8af00a5f89afa11f0cdb0caf032afe38e6e1b18))
|
|
88
|
+
|
|
89
|
+
## [0.1.0](https://github.com/MetaSekaiLab/nnnotes/releases/tag/v0.1.0) - 2026-09-27
|
|
90
|
+
|
|
91
|
+
### Features
|
|
92
|
+
|
|
93
|
+
- Add the nnnotes data toolkit ([073c60c](https://github.com/MetaSekaiLab/nnnotes/commit/073c60cc029b067e2b5db9a8c5772f7dbdcc58d4))
|
|
94
|
+
- Read the APK boot data with bundled type trees ([fb1739e](https://github.com/MetaSekaiLab/nnnotes/commit/fb1739ebe5b898dcf5c6a4c02b4eb88f6f59ec28))
|
|
95
|
+
- Build Live2D models into the web site ([03e3831](https://github.com/MetaSekaiLab/nnnotes/commit/03e38314eebf7d6a9bb62b5905778056b73d33c3))
|
|
96
|
+
- Fetch the current master data version from the game's API ([bcd7f20](https://github.com/MetaSekaiLab/nnnotes/commit/bcd7f20d9bb1e3bfeb89dd72f49f5d360b8da2ae))
|
|
97
|
+
- Serve every region and language from one web site ([8160121](https://github.com/MetaSekaiLab/nnnotes/commit/81601210452e3b40f195e115beaae0dccf10f7cc))
|
|
98
|
+
- Add open and game text styles for exported text (--fonts) ([da41edf](https://github.com/MetaSekaiLab/nnnotes/commit/da41edf7fe17fff125f56d9a5d5ab2afa5e3f8f6))
|
|
99
|
+
- Export frames, effects, stills, chat and videos of story episodes ([2bacea1](https://github.com/MetaSekaiLab/nnnotes/commit/2bacea1e02054393b4d8bc09d7325c3fa2be06da))
|
|
100
|
+
- Add the asset export: export, plan, run-stage, catalogs ([d04423c](https://github.com/MetaSekaiLab/nnnotes/commit/d04423c2db72eb8d350c8271aaf2c9ea4bf64b88))
|
|
101
|
+
- **live:** Offer the Live options that select files ([dc4f1e7](https://github.com/MetaSekaiLab/nnnotes/commit/dc4f1e704ccdebba878f179f24aa2157d6186c88))
|
|
102
|
+
- **web:** Export story episodes for the story player ([197af04](https://github.com/MetaSekaiLab/nnnotes/commit/197af04954c4f5bd4dc6932140f57c0b7f937452))
|
|
103
|
+
- **export:** FLAC level 8 by default and explicit layout placement ([11bf5d8](https://github.com/MetaSekaiLab/nnnotes/commit/11bf5d87f6decd8b0d465661c8d41f48b227945e))
|
|
104
|
+
- **story:** Chat texts, emoji sprites, frame particles, lit rooms and CRI Lips data ([5eb4f6c](https://github.com/MetaSekaiLab/nnnotes/commit/5eb4f6cfa1978eab6846ff6cc99b48a997b90efc))
|
|
105
|
+
- **deck-data:** One JSON of charts and master tables for deck-building tools ([06e6943](https://github.com/MetaSekaiLab/nnnotes/commit/06e6943e4a2ad977d6684871906f7d90a282a227))
|
|
106
|
+
- **voices:** Voice index view and query command; one ACB table reader ([6bb748a](https://github.com/MetaSekaiLab/nnnotes/commit/6bb748aaa7e24942f5cee6ebb704e7c016e9a8c7))
|
|
107
|
+
- **cri.movie:** All USM streams (MPEG-1, H.264, alpha, subtitles, HCA) and bundle-held movies ([ff97da8](https://github.com/MetaSekaiLab/nnnotes/commit/ff97da8b2cb01721041522f69d8c42c978b5150c))
|
|
108
|
+
- **voices:** Story episode voices with their lines, speakers and cues ([e65d84d](https://github.com/MetaSekaiLab/nnnotes/commit/e65d84d9733e039bf046c3bfd56a5cda06eba118))
|
|
109
|
+
- **story:** Missing glyphs and frame texts in the story font data ([476dff0](https://github.com/MetaSekaiLab/nnnotes/commit/476dff0c02f47017f26260997fb2b8bce0d2078e))
|
|
110
|
+
- **story:** Open font assets follow the game's TMP fallback chains ([b5cd68e](https://github.com/MetaSekaiLab/nnnotes/commit/b5cd68ee7bbd3dc2dc58c9fb8858a20b34e7179c))
|
|
111
|
+
|
|
112
|
+
### Bug fixes
|
|
113
|
+
|
|
114
|
+
- Correct the ADV resource closure for chat stamps and IgnoreData rows ([9f03fb9](https://github.com/MetaSekaiLab/nnnotes/commit/9f03fb97784ecdfbeb0e576c8e257c0e6123b05c))
|
|
115
|
+
- Stop with a usage error on unknown keys, ids and charts ([1fa6958](https://github.com/MetaSekaiLab/nnnotes/commit/1fa69589a68246ffa2cbd5a96bda8c1646be37b1))
|
|
116
|
+
- Read the region, CDN and bundle key only when a download needs them ([da1d47c](https://github.com/MetaSekaiLab/nnnotes/commit/da1d47c918d7895e2f83390cf69f888817d0fcb9))
|
|
117
|
+
- Handle more mesh, texture and reference forms in room and spot ([4ddc76c](https://github.com/MetaSekaiLab/nnnotes/commit/4ddc76ca667d5458a77928560e562060a331cf6b))
|
|
118
|
+
- Generate MonoBehaviour typetrees in Unity's own node layout ([d0efb2c](https://github.com/MetaSekaiLab/nnnotes/commit/d0efb2cbbe17a2749fdb7f8f6b2370d25de95917))
|
|
119
|
+
- Story UI language, model names, master JSON and external AWB ([29aada6](https://github.com/MetaSekaiLab/nnnotes/commit/29aada69e763dde8c2fd51fe287dfea118314766))
|
|
120
|
+
- **export:** Read the APK's raw files from the APK ([3d9f79c](https://github.com/MetaSekaiLab/nnnotes/commit/3d9f79c135afb232a12ed3661584f780187a9b4b))
|
|
121
|
+
- Size default worker counts by the CPUs the process may use ([a65eaf8](https://github.com/MetaSekaiLab/nnnotes/commit/a65eaf89d9726dcd3200166c3483cded94b30633))
|
|
122
|
+
- **web:** Name --story when the fonts extra is missing ([8cb0f66](https://github.com/MetaSekaiLab/nnnotes/commit/8cb0f66f8e2ffcbc0171bbd0fc1bfbac9be09baa))
|
|
123
|
+
|
|
124
|
+
### Performance
|
|
125
|
+
|
|
126
|
+
- Reuse decoded textures, shader dumps and cue sheets by content ([1f7c166](https://github.com/MetaSekaiLab/nnnotes/commit/1f7c166d008eb06b0ac6f193ad7958fb88dbf7b4))
|
|
127
|
+
- Pipeline the web build and reuse scenes, BGM decodes and read sets ([25461d1](https://github.com/MetaSekaiLab/nnnotes/commit/25461d12c715369285027d008ebc53f49c73acb6))
|
|
128
|
+
- Start numpy with one OpenBLAS thread unless the environment sets it ([f93d3d2](https://github.com/MetaSekaiLab/nnnotes/commit/f93d3d2d4e1f34e863d96cf17175ead1376d09cc))
|
|
129
|
+
- Serve read-set plans from long-lived player processes ([440ceaa](https://github.com/MetaSekaiLab/nnnotes/commit/440ceaad5c63e83bba4b3a2dde2592467b61c111))
|
|
130
|
+
- **export:** Bound the memory of the finalize and of plan -o ([cad57e6](https://github.com/MetaSekaiLab/nnnotes/commit/cad57e61c4483300f402418501bfb754558287bf))
|
|
131
|
+
- **cli:** Start without UnityPy; --flac-level on audio, live and story ([c5057d5](https://github.com/MetaSekaiLab/nnnotes/commit/c5057d5855b3703308c9b5d7d762821a0498bfaa))
|
|
132
|
+
|
|
133
|
+
### Refactoring
|
|
134
|
+
|
|
135
|
+
- Rename the site command to web ([43fe4cc](https://github.com/MetaSekaiLab/nnnotes/commit/43fe4cc3e016aa8a773182f8e8995b1ef27b1066))
|
|
136
|
+
|
|
137
|
+
### Documentation
|
|
138
|
+
|
|
139
|
+
- Remove the contributing guide ([056b4f6](https://github.com/MetaSekaiLab/nnnotes/commit/056b4f64316a5949f99f1cbefd3f0f1d7692a97e))
|
|
140
|
+
- Title the project nnnotes?! ([91b5042](https://github.com/MetaSekaiLab/nnnotes/commit/91b50422fc389945367924bcfdf773954fdafd03))
|
|
141
|
+
- State determinism with its condition; settings per command ([9b0c6f7](https://github.com/MetaSekaiLab/nnnotes/commit/9b0c6f79b651303fca979b3811ffe62d9b7c0c00))
|
|
142
|
+
- Recommend Python 3.13 ([cfea0f5](https://github.com/MetaSekaiLab/nnnotes/commit/cfea0f56be5758dc8b7fa3ca0f8f0191fc38336a))
|
|
143
|
+
- Add performance.md: where a web build spends its time ([a4fb6a0](https://github.com/MetaSekaiLab/nnnotes/commit/a4fb6a0db5a6976630ac9cb069e026078772823a))
|
|
144
|
+
- **performance:** Incremental runs and raw files not in the cache ([69a879c](https://github.com/MetaSekaiLab/nnnotes/commit/69a879ca1d64aecdd5eea3e352cd0861f0a88a66))
|
|
145
|
+
|
|
146
|
+
### Build
|
|
147
|
+
|
|
148
|
+
- **release:** Publish to PyPI with trusted publishing ([bb542af](https://github.com/MetaSekaiLab/nnnotes/commit/bb542af0d7e22a0255a7ee45099a51eb7fbadd12))
|
|
149
|
+
|
|
150
|
+
### CI
|
|
151
|
+
|
|
152
|
+
- Check the stage golden records with pinned library versions ([f2594f7](https://github.com/MetaSekaiLab/nnnotes/commit/f2594f70366c8b46d70d638168d43f6dd7949e5b))
|
|
153
|
+
|
|
154
|
+
### Miscellaneous
|
|
155
|
+
|
|
156
|
+
- List MetaMiku and emptysekai as copyright holders ([1629616](https://github.com/MetaSekaiLab/nnnotes/commit/1629616da629b7fbe7f714287aeff17933176357))
|
|
157
|
+
- List MetaMiku as an author ([cc43e13](https://github.com/MetaSekaiLab/nnnotes/commit/cc43e132875206d02d8665b19c06b27255ab0037))
|
|
158
|
+
- Point the project links at MetaSekaiLab/nnnotes ([a2b8304](https://github.com/MetaSekaiLab/nnnotes/commit/a2b83040bcf06771028bbfd5e90c10c225bde3e9))
|
|
159
|
+
- English package readme; check commits on pull requests only ([e602dd5](https://github.com/MetaSekaiLab/nnnotes/commit/e602dd5ebf6dda0f18da5ace54a02dbb893a796f))
|
|
160
|
+
|
|
161
|
+
|
|
@@ -1,36 +1,39 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nnnotes
|
|
3
|
-
Version: 0.1.
|
|
4
|
-
Summary: Offline data toolkit for BanG Dream! Our Notes game files: catalogs, bundles, master data, stories, Live2D, audio and live charts
|
|
5
|
-
Author: MetaMiku, emptysekai
|
|
6
|
-
License-Expression: MIT
|
|
7
|
-
Project-URL: Homepage, https://github.com/MetaSekaiLab/nnnotes
|
|
8
|
-
Project-URL: Source, https://github.com/MetaSekaiLab/nnnotes
|
|
9
|
-
Project-URL: Issues, https://github.com/MetaSekaiLab/nnnotes/issues
|
|
3
|
+
Version: 0.1.4
|
|
10
4
|
Classifier: Programming Language :: Python :: 3
|
|
11
5
|
Classifier: Operating System :: OS Independent
|
|
12
6
|
Classifier: Topic :: Multimedia
|
|
13
|
-
Requires-
|
|
14
|
-
Description-Content-Type: text/markdown
|
|
15
|
-
License-File: LICENSE
|
|
16
|
-
Requires-Dist: UnityPy>=1.25
|
|
7
|
+
Requires-Dist: unitypy>=1.25
|
|
17
8
|
Requires-Dist: numpy>=2.0
|
|
18
|
-
Requires-Dist:
|
|
9
|
+
Requires-Dist: pillow>=10.0
|
|
19
10
|
Requires-Dist: pycryptodome>=3.20
|
|
20
11
|
Requires-Dist: grpcio>=1.49.1
|
|
21
12
|
Requires-Dist: brotli>=1.1
|
|
22
|
-
|
|
23
|
-
Requires-Dist:
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist:
|
|
13
|
+
Requires-Dist: fonttools>=4.50 ; extra == 'fonts'
|
|
14
|
+
Requires-Dist: freetype-py>=2.5 ; extra == 'fonts'
|
|
15
|
+
Requires-Dist: scipy>=1.13 ; extra == 'fonts'
|
|
16
|
+
Requires-Dist: pytest>=8 ; extra == 'test'
|
|
17
|
+
Requires-Dist: pyflakes>=3.2 ; extra == 'test'
|
|
18
|
+
Requires-Dist: jsonschema>=4.18 ; extra == 'test'
|
|
26
19
|
Provides-Extra: fonts
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
Provides-Extra: test
|
|
21
|
+
License-File: LICENSE
|
|
22
|
+
Summary: Offline data toolkit for BanG Dream! Our Notes game files: catalogs, bundles, master data, stories, Live2D, audio and live charts
|
|
23
|
+
Author: MetaMiku, emptysekai
|
|
24
|
+
License-Expression: MIT
|
|
25
|
+
Requires-Python: >=3.11
|
|
26
|
+
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
27
|
+
Project-URL: Homepage, https://github.com/MetaSekaiLab/nnnotes
|
|
28
|
+
Project-URL: Issues, https://github.com/MetaSekaiLab/nnnotes/issues
|
|
29
|
+
Project-URL: Source, https://github.com/MetaSekaiLab/nnnotes
|
|
31
30
|
|
|
32
31
|
# nnnotes?!
|
|
33
32
|
|
|
33
|
+
Japanese-release support includes anonymous version discovery, authenticated CDN downloads, gzip catalogs,
|
|
34
|
+
snapshot-isolated caches and split APKs. See the [JP guide](https://github.com/MetaSekaiLab/nnnotes/blob/main/docs/jp.md)
|
|
35
|
+
for configuration and validation limits.
|
|
36
|
+
|
|
34
37
|
[简体中文](https://github.com/MetaSekaiLab/nnnotes/blob/main/README.md) | [English](https://github.com/MetaSekaiLab/nnnotes/blob/main/README.en.md)
|
|
35
38
|
|
|
36
39
|
nnnotes is an offline data toolkit for the game files of BanG Dream! Our Notes: it reads Addressables catalogs,
|
|
@@ -78,9 +81,10 @@ nnnotes config check # each setting's origin and whether it is valid
|
|
|
78
81
|
| `audio` | CRI cue sheet | one audio file per cue (FLAC / Ogg / WAV) + cue metadata |
|
|
79
82
|
| `crikey` | APK | the CRI HCA keycode from the game's boot data (shows whether it was found; can write a `.hcakey`) |
|
|
80
83
|
| `player` | APK | render-related global settings (color space, quality levels, renderers) as JSON |
|
|
84
|
+
| `ui` (experimental) | APK set and its embedded catalog | an offline serialized prefab library with dependency roots, AnimatorControllers, stable references and PNG/font resources for the optional ournotes-player UI preview ([format and limits](https://github.com/MetaSekaiLab/nnnotes/blob/main/docs/ui.md)) |
|
|
81
85
|
| `live` | music ID + difficulty | a full chart directory: chart and runtime notes, 3D scene, note and effect assets, BGM and sounds, sound routing |
|
|
82
86
|
| `web` | `--pair music:difficulty` (repeatable) or `--all`; `--live2d model` (repeatable) or `--all-live2d`; `--story episode` (repeatable) or `--all-stories`; `--region region` (repeatable) or `--all-regions` | an ournotes-player static site: shared player + per-chart / per-model / per-episode manifests + content-addressed assets; the Live2D models of the stories are built first as models, listed in `models.json`, and the story manifests reference them; one site can serve several regions, with listing texts in five languages; a story's interface texts are grouped by language, with TextMeshPro font assets generated from open fonts (the game's fonts with `--fonts game`); compressible assets (JSON, shaders, moc3, ...) are stored gzip encoded by default (`--compress br` / `none`) |
|
|
83
|
-
| `
|
|
87
|
+
| `music-data` | master data files (`--master-files` directory or `--apk-master`), or decoded master data with its manifest (`--decoded-master`) | one JSON file with every song and chart: titles and credits in five languages, bands, vocal characters, category, tags, release time, score ranks, BGM length; the Gekisou catalog (member cards, snaps and their Gekisou skills and support skills); per difficulty the level, note counts, BPM, chart times, skill events and fever ranges; and the chart statistics the deck model ournotes-deck (built into nnnotes) measures on its whole-live simulation (the no-skill score, the weight of every score-up skill kind at every position), plus single-shape Gekisou aptitude (increments and standard errors, not an optimal deck; omit with `--no-gekisou-aptitude`). `--full` adds the deck model's input: every chart's runtime notes and the master data tables about cards, skills, bonuses, scores and events ([format](https://github.com/MetaSekaiLab/nnnotes/blob/main/docs/music-data.md)) |
|
|
84
88
|
|
|
85
89
|
Export conventions:
|
|
86
90
|
|
|
@@ -217,6 +221,18 @@ everywhere.
|
|
|
217
221
|
See [docs/performance.md](https://github.com/MetaSekaiLab/nnnotes/blob/main/docs/performance.md) for where a
|
|
218
222
|
`web` build spends its time and which parts of it run in compiled code.
|
|
219
223
|
|
|
224
|
+
## Changelog
|
|
225
|
+
|
|
226
|
+
[CHANGELOG.md](https://github.com/MetaSekaiLab/nnnotes/blob/main/CHANGELOG.md) lists the changes in every version,
|
|
227
|
+
generated from the commits by [git-cliff](https://git-cliff.org/). The commit that bumps the version regenerates it:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
git cliff --tag vX.Y.Z -o CHANGELOG.md
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
When a `vX.Y.Z` tag is pushed, the release workflow checks the versions and that CHANGELOG.md has a section for it.
|
|
234
|
+
|
|
220
235
|
## License
|
|
221
236
|
|
|
222
237
|
MIT, see [LICENSE](https://github.com/MetaSekaiLab/nnnotes/blob/main/LICENSE).
|
|
238
|
+
|
|
@@ -1,36 +1,9 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: nnnotes
|
|
3
|
-
Version: 0.1.2
|
|
4
|
-
Summary: Offline data toolkit for BanG Dream! Our Notes game files: catalogs, bundles, master data, stories, Live2D, audio and live charts
|
|
5
|
-
Author: MetaMiku, emptysekai
|
|
6
|
-
License-Expression: MIT
|
|
7
|
-
Project-URL: Homepage, https://github.com/MetaSekaiLab/nnnotes
|
|
8
|
-
Project-URL: Source, https://github.com/MetaSekaiLab/nnnotes
|
|
9
|
-
Project-URL: Issues, https://github.com/MetaSekaiLab/nnnotes/issues
|
|
10
|
-
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Operating System :: OS Independent
|
|
12
|
-
Classifier: Topic :: Multimedia
|
|
13
|
-
Requires-Python: >=3.11
|
|
14
|
-
Description-Content-Type: text/markdown
|
|
15
|
-
License-File: LICENSE
|
|
16
|
-
Requires-Dist: UnityPy>=1.25
|
|
17
|
-
Requires-Dist: numpy>=2.0
|
|
18
|
-
Requires-Dist: Pillow>=10.0
|
|
19
|
-
Requires-Dist: pycryptodome>=3.20
|
|
20
|
-
Requires-Dist: grpcio>=1.49.1
|
|
21
|
-
Requires-Dist: brotli>=1.1
|
|
22
|
-
Provides-Extra: test
|
|
23
|
-
Requires-Dist: pytest>=8; extra == "test"
|
|
24
|
-
Requires-Dist: pyflakes>=3.2; extra == "test"
|
|
25
|
-
Requires-Dist: jsonschema>=4.18; extra == "test"
|
|
26
|
-
Provides-Extra: fonts
|
|
27
|
-
Requires-Dist: fonttools>=4.50; extra == "fonts"
|
|
28
|
-
Requires-Dist: freetype-py>=2.5; extra == "fonts"
|
|
29
|
-
Requires-Dist: scipy>=1.13; extra == "fonts"
|
|
30
|
-
Dynamic: license-file
|
|
31
|
-
|
|
32
1
|
# nnnotes?!
|
|
33
2
|
|
|
3
|
+
Japanese-release support includes anonymous version discovery, authenticated CDN downloads, gzip catalogs,
|
|
4
|
+
snapshot-isolated caches and split APKs. See the [JP guide](https://github.com/MetaSekaiLab/nnnotes/blob/main/docs/jp.md)
|
|
5
|
+
for configuration and validation limits.
|
|
6
|
+
|
|
34
7
|
[简体中文](https://github.com/MetaSekaiLab/nnnotes/blob/main/README.md) | [English](https://github.com/MetaSekaiLab/nnnotes/blob/main/README.en.md)
|
|
35
8
|
|
|
36
9
|
nnnotes is an offline data toolkit for the game files of BanG Dream! Our Notes: it reads Addressables catalogs,
|
|
@@ -78,9 +51,10 @@ nnnotes config check # each setting's origin and whether it is valid
|
|
|
78
51
|
| `audio` | CRI cue sheet | one audio file per cue (FLAC / Ogg / WAV) + cue metadata |
|
|
79
52
|
| `crikey` | APK | the CRI HCA keycode from the game's boot data (shows whether it was found; can write a `.hcakey`) |
|
|
80
53
|
| `player` | APK | render-related global settings (color space, quality levels, renderers) as JSON |
|
|
54
|
+
| `ui` (experimental) | APK set and its embedded catalog | an offline serialized prefab library with dependency roots, AnimatorControllers, stable references and PNG/font resources for the optional ournotes-player UI preview ([format and limits](https://github.com/MetaSekaiLab/nnnotes/blob/main/docs/ui.md)) |
|
|
81
55
|
| `live` | music ID + difficulty | a full chart directory: chart and runtime notes, 3D scene, note and effect assets, BGM and sounds, sound routing |
|
|
82
56
|
| `web` | `--pair music:difficulty` (repeatable) or `--all`; `--live2d model` (repeatable) or `--all-live2d`; `--story episode` (repeatable) or `--all-stories`; `--region region` (repeatable) or `--all-regions` | an ournotes-player static site: shared player + per-chart / per-model / per-episode manifests + content-addressed assets; the Live2D models of the stories are built first as models, listed in `models.json`, and the story manifests reference them; one site can serve several regions, with listing texts in five languages; a story's interface texts are grouped by language, with TextMeshPro font assets generated from open fonts (the game's fonts with `--fonts game`); compressible assets (JSON, shaders, moc3, ...) are stored gzip encoded by default (`--compress br` / `none`) |
|
|
83
|
-
| `
|
|
57
|
+
| `music-data` | master data files (`--master-files` directory or `--apk-master`), or decoded master data with its manifest (`--decoded-master`) | one JSON file with every song and chart: titles and credits in five languages, bands, vocal characters, category, tags, release time, score ranks, BGM length; the Gekisou catalog (member cards, snaps and their Gekisou skills and support skills); per difficulty the level, note counts, BPM, chart times, skill events and fever ranges; and the chart statistics the deck model ournotes-deck (built into nnnotes) measures on its whole-live simulation (the no-skill score, the weight of every score-up skill kind at every position), plus single-shape Gekisou aptitude (increments and standard errors, not an optimal deck; omit with `--no-gekisou-aptitude`). `--full` adds the deck model's input: every chart's runtime notes and the master data tables about cards, skills, bonuses, scores and events ([format](https://github.com/MetaSekaiLab/nnnotes/blob/main/docs/music-data.md)) |
|
|
84
58
|
|
|
85
59
|
Export conventions:
|
|
86
60
|
|
|
@@ -217,6 +191,17 @@ everywhere.
|
|
|
217
191
|
See [docs/performance.md](https://github.com/MetaSekaiLab/nnnotes/blob/main/docs/performance.md) for where a
|
|
218
192
|
`web` build spends its time and which parts of it run in compiled code.
|
|
219
193
|
|
|
194
|
+
## Changelog
|
|
195
|
+
|
|
196
|
+
[CHANGELOG.md](https://github.com/MetaSekaiLab/nnnotes/blob/main/CHANGELOG.md) lists the changes in every version,
|
|
197
|
+
generated from the commits by [git-cliff](https://git-cliff.org/). The commit that bumps the version regenerates it:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
git cliff --tag vX.Y.Z -o CHANGELOG.md
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
When a `vX.Y.Z` tag is pushed, the release workflow checks the versions and that CHANGELOG.md has a section for it.
|
|
204
|
+
|
|
220
205
|
## License
|
|
221
206
|
|
|
222
207
|
MIT, see [LICENSE](https://github.com/MetaSekaiLab/nnnotes/blob/main/LICENSE).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[build-system]
|
|
2
|
-
requires = ["
|
|
3
|
-
build-backend = "
|
|
2
|
+
requires = ["maturin>=1.9,<2"]
|
|
3
|
+
build-backend = "maturin"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "nnnotes"
|
|
@@ -37,14 +37,15 @@ Homepage = "https://github.com/MetaSekaiLab/nnnotes"
|
|
|
37
37
|
Source = "https://github.com/MetaSekaiLab/nnnotes"
|
|
38
38
|
Issues = "https://github.com/MetaSekaiLab/nnnotes/issues"
|
|
39
39
|
|
|
40
|
-
[tool.
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
40
|
+
[tool.maturin]
|
|
41
|
+
# the pure Python package src/nnnotes with the extension module nnnotes._deck (rust/: ournotes-sim of ournotes-deck,
|
|
42
|
+
# pinned by commit); the version is rust/Cargo.toml's, kept equal to nnnotes.__version__ (tests/test_musicdata.py)
|
|
43
|
+
python-source = "src"
|
|
44
|
+
module-name = "nnnotes._deck"
|
|
45
|
+
manifest-path = "rust/Cargo.toml"
|
|
46
|
+
profile = "release"
|
|
47
|
+
locked = true
|
|
48
|
+
include = [{ path = "CHANGELOG.md", format = "sdist" }]
|
|
48
49
|
|
|
49
50
|
[tool.pytest.ini_options]
|
|
50
51
|
testpaths = ["tests"]
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
# This file is automatically @generated by Cargo.
|
|
2
|
+
# It is not intended for manual editing.
|
|
3
|
+
version = 4
|
|
4
|
+
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "block-buffer"
|
|
7
|
+
version = "0.12.1"
|
|
8
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
9
|
+
checksum = "d2f6c7dbe95a6ed67ad9f18e57daf93a2f034c524b99fd2b76d18fdfeb6660aa"
|
|
10
|
+
dependencies = [
|
|
11
|
+
"hybrid-array",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
[[package]]
|
|
15
|
+
name = "cfg-if"
|
|
16
|
+
version = "1.0.5"
|
|
17
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
18
|
+
checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
|
|
19
|
+
|
|
20
|
+
[[package]]
|
|
21
|
+
name = "cpufeatures"
|
|
22
|
+
version = "0.3.1"
|
|
23
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
24
|
+
checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566"
|
|
25
|
+
dependencies = [
|
|
26
|
+
"libc",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
[[package]]
|
|
30
|
+
name = "crypto-common"
|
|
31
|
+
version = "0.2.2"
|
|
32
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
33
|
+
checksum = "ce6e4c961d6cd6c9a86db418387425e8bdeaf05b3c8bc1411e6dca4c252f1453"
|
|
34
|
+
dependencies = [
|
|
35
|
+
"hybrid-array",
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
[[package]]
|
|
39
|
+
name = "digest"
|
|
40
|
+
version = "0.11.3"
|
|
41
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
42
|
+
checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2"
|
|
43
|
+
dependencies = [
|
|
44
|
+
"block-buffer",
|
|
45
|
+
"crypto-common",
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
[[package]]
|
|
49
|
+
name = "heck"
|
|
50
|
+
version = "0.5.0"
|
|
51
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
52
|
+
checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
|
|
53
|
+
|
|
54
|
+
[[package]]
|
|
55
|
+
name = "hybrid-array"
|
|
56
|
+
version = "0.4.15"
|
|
57
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
58
|
+
checksum = "27f864f10dfb56725ce5ce5472bc52252c8f93a4ab86327122cebf62c5f59a17"
|
|
59
|
+
dependencies = [
|
|
60
|
+
"typenum",
|
|
61
|
+
]
|
|
62
|
+
|
|
63
|
+
[[package]]
|
|
64
|
+
name = "itoa"
|
|
65
|
+
version = "1.0.18"
|
|
66
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
67
|
+
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
|
|
68
|
+
|
|
69
|
+
[[package]]
|
|
70
|
+
name = "libc"
|
|
71
|
+
version = "0.2.189"
|
|
72
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
73
|
+
checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2"
|
|
74
|
+
|
|
75
|
+
[[package]]
|
|
76
|
+
name = "memchr"
|
|
77
|
+
version = "2.8.3"
|
|
78
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
79
|
+
checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
|
|
80
|
+
|
|
81
|
+
[[package]]
|
|
82
|
+
name = "nnnotes-deck"
|
|
83
|
+
version = "0.1.4"
|
|
84
|
+
dependencies = [
|
|
85
|
+
"ournotes-sim",
|
|
86
|
+
"pyo3",
|
|
87
|
+
"serde_json",
|
|
88
|
+
]
|
|
89
|
+
|
|
90
|
+
[[package]]
|
|
91
|
+
name = "once_cell"
|
|
92
|
+
version = "1.21.4"
|
|
93
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
94
|
+
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
|
95
|
+
|
|
96
|
+
[[package]]
|
|
97
|
+
name = "ournotes-sim"
|
|
98
|
+
version = "0.0.2"
|
|
99
|
+
source = "git+https://github.com/empty-sekai/ournotes-deck?rev=76e96b617842bdcc031cce98e3dfeead27ddbb85#76e96b617842bdcc031cce98e3dfeead27ddbb85"
|
|
100
|
+
dependencies = [
|
|
101
|
+
"serde",
|
|
102
|
+
"serde_json",
|
|
103
|
+
"sha2",
|
|
104
|
+
]
|
|
105
|
+
|
|
106
|
+
[[package]]
|
|
107
|
+
name = "portable-atomic"
|
|
108
|
+
version = "1.15.0"
|
|
109
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
110
|
+
checksum = "05c8b63e8d9609db387f0324918f81d68fe27748f084ef092fb35954d0539a85"
|
|
111
|
+
|
|
112
|
+
[[package]]
|
|
113
|
+
name = "proc-macro2"
|
|
114
|
+
version = "1.0.107"
|
|
115
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
116
|
+
checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
|
|
117
|
+
dependencies = [
|
|
118
|
+
"unicode-ident",
|
|
119
|
+
]
|
|
120
|
+
|
|
121
|
+
[[package]]
|
|
122
|
+
name = "pyo3"
|
|
123
|
+
version = "0.29.2"
|
|
124
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
125
|
+
checksum = "4688ddedf473e32662b9b067670129a8afb8c18e351482c70d62ba4a88171e8b"
|
|
126
|
+
dependencies = [
|
|
127
|
+
"libc",
|
|
128
|
+
"once_cell",
|
|
129
|
+
"portable-atomic",
|
|
130
|
+
"pyo3-build-config",
|
|
131
|
+
"pyo3-ffi",
|
|
132
|
+
"pyo3-macros",
|
|
133
|
+
]
|
|
134
|
+
|
|
135
|
+
[[package]]
|
|
136
|
+
name = "pyo3-build-config"
|
|
137
|
+
version = "0.29.2"
|
|
138
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
139
|
+
checksum = "f41027e41b4bd03f6e60f9f417fe24a6341a6bb744edd62b6f709f2a52ea30e9"
|
|
140
|
+
dependencies = [
|
|
141
|
+
"target-lexicon",
|
|
142
|
+
]
|
|
143
|
+
|
|
144
|
+
[[package]]
|
|
145
|
+
name = "pyo3-ffi"
|
|
146
|
+
version = "0.29.2"
|
|
147
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
148
|
+
checksum = "e591a95526fead067432c3b3a33fc74770b87b1e04e73671090d9c2055a2b327"
|
|
149
|
+
dependencies = [
|
|
150
|
+
"libc",
|
|
151
|
+
"pyo3-build-config",
|
|
152
|
+
]
|
|
153
|
+
|
|
154
|
+
[[package]]
|
|
155
|
+
name = "pyo3-macros"
|
|
156
|
+
version = "0.29.2"
|
|
157
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
158
|
+
checksum = "73225868fc1cd84eef2c3c230ddb91273bf1de46aeb8a4248da76d32a0924a1c"
|
|
159
|
+
dependencies = [
|
|
160
|
+
"proc-macro2",
|
|
161
|
+
"pyo3-macros-backend",
|
|
162
|
+
"quote",
|
|
163
|
+
"syn 2.0.119",
|
|
164
|
+
]
|
|
165
|
+
|
|
166
|
+
[[package]]
|
|
167
|
+
name = "pyo3-macros-backend"
|
|
168
|
+
version = "0.29.2"
|
|
169
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
170
|
+
checksum = "571575aa3749fa6216757dd47d2a3e7ef360f329a40f0666a9fbd14889024952"
|
|
171
|
+
dependencies = [
|
|
172
|
+
"heck",
|
|
173
|
+
"proc-macro2",
|
|
174
|
+
"quote",
|
|
175
|
+
"syn 2.0.119",
|
|
176
|
+
]
|
|
177
|
+
|
|
178
|
+
[[package]]
|
|
179
|
+
name = "quote"
|
|
180
|
+
version = "1.0.47"
|
|
181
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
182
|
+
checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
|
|
183
|
+
dependencies = [
|
|
184
|
+
"proc-macro2",
|
|
185
|
+
]
|
|
186
|
+
|
|
187
|
+
[[package]]
|
|
188
|
+
name = "serde"
|
|
189
|
+
version = "1.0.229"
|
|
190
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
191
|
+
checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
|
|
192
|
+
dependencies = [
|
|
193
|
+
"serde_core",
|
|
194
|
+
"serde_derive",
|
|
195
|
+
]
|
|
196
|
+
|
|
197
|
+
[[package]]
|
|
198
|
+
name = "serde_core"
|
|
199
|
+
version = "1.0.229"
|
|
200
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
201
|
+
checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
|
|
202
|
+
dependencies = [
|
|
203
|
+
"serde_derive",
|
|
204
|
+
]
|
|
205
|
+
|
|
206
|
+
[[package]]
|
|
207
|
+
name = "serde_derive"
|
|
208
|
+
version = "1.0.229"
|
|
209
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
210
|
+
checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
|
|
211
|
+
dependencies = [
|
|
212
|
+
"proc-macro2",
|
|
213
|
+
"quote",
|
|
214
|
+
"syn 3.0.6",
|
|
215
|
+
]
|
|
216
|
+
|
|
217
|
+
[[package]]
|
|
218
|
+
name = "serde_json"
|
|
219
|
+
version = "1.0.151"
|
|
220
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
221
|
+
checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
|
|
222
|
+
dependencies = [
|
|
223
|
+
"itoa",
|
|
224
|
+
"memchr",
|
|
225
|
+
"serde",
|
|
226
|
+
"serde_core",
|
|
227
|
+
"zmij",
|
|
228
|
+
]
|
|
229
|
+
|
|
230
|
+
[[package]]
|
|
231
|
+
name = "sha2"
|
|
232
|
+
version = "0.11.0"
|
|
233
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
234
|
+
checksum = "446ba717509524cb3f22f17ecc096f10f4822d76ab5c0b9822c5f9c284e825f4"
|
|
235
|
+
dependencies = [
|
|
236
|
+
"cfg-if",
|
|
237
|
+
"cpufeatures",
|
|
238
|
+
"digest",
|
|
239
|
+
]
|
|
240
|
+
|
|
241
|
+
[[package]]
|
|
242
|
+
name = "syn"
|
|
243
|
+
version = "2.0.119"
|
|
244
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
245
|
+
checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297"
|
|
246
|
+
dependencies = [
|
|
247
|
+
"proc-macro2",
|
|
248
|
+
"quote",
|
|
249
|
+
"unicode-ident",
|
|
250
|
+
]
|
|
251
|
+
|
|
252
|
+
[[package]]
|
|
253
|
+
name = "syn"
|
|
254
|
+
version = "3.0.6"
|
|
255
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
256
|
+
checksum = "8593e8e72159ed2257d083c7a454a85cbf854f37a0966d8d483aff8c8a3ebcee"
|
|
257
|
+
dependencies = [
|
|
258
|
+
"proc-macro2",
|
|
259
|
+
"quote",
|
|
260
|
+
"unicode-ident",
|
|
261
|
+
]
|
|
262
|
+
|
|
263
|
+
[[package]]
|
|
264
|
+
name = "target-lexicon"
|
|
265
|
+
version = "0.13.5"
|
|
266
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
267
|
+
checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
|
|
268
|
+
|
|
269
|
+
[[package]]
|
|
270
|
+
name = "typenum"
|
|
271
|
+
version = "1.20.1"
|
|
272
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
273
|
+
checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20"
|
|
274
|
+
|
|
275
|
+
[[package]]
|
|
276
|
+
name = "unicode-ident"
|
|
277
|
+
version = "1.0.26"
|
|
278
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
279
|
+
checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
|
|
280
|
+
|
|
281
|
+
[[package]]
|
|
282
|
+
name = "zmij"
|
|
283
|
+
version = "1.0.23"
|
|
284
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
285
|
+
checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
|