Another chart previewing library for Arcaea.
- pydantic~=1.9.1
- Pillow~=9.1.1
- opencv-python~=4.5.5.64
- numpy~=1.23.0
- pyparsing~=3.0.9
- pytest~=7.2.2(for test only, remove it if you don't need to run tests)
pip install -r requirements.txt
Render an Arcaea Chart simply.
Before using, you need to copy and rename theme.py
to theme_local.py
, and edit theme_local.py
to locate assets file.
If a property of BaseTheme
is inherited by one of its subclasses (e.g. LightTheme
), you should modify the property on its subclass. If the property is not inherited, then you should modify it directly on BaseTheme
.
name | file |
---|---|
font_Exo_SemiBold_XX |
Exo-SemiBold.ttf |
font_Kazesawa_Regular_XX |
Kazesawa-Regular.ttf |
font_SourceHanMonoSC_Regular_XX |
SourceHanMonoSC-Regular.otf |
tile_path |
track.png and track_dark.png |
tap_path |
note.png and note_dark.png |
hold_path |
note_hold.png and note_hold_dark.png |
arctap_path |
tap_l.png and tap_d.png |
arctap_sfx_path |
sfx_l_note.jpg and sfx_d_note.jpg |
default_bg_path |
base_light.jpg and base_conflict.jpg |
custom_bg_dir_path |
put your custom background here if bg field has been defined in songlist |
⚠ Note:
This repo does NOT provide these assets files, you need to obtain them by yourself. It is recommended to get them at Arcaea-Infinity/OpenArcaeaArts (Licensed underCC BY-NC
).
When rendering the official chart, you deserve to have a songlist
from which you can build the song metadata.
from ArcaeaChartRender.render import Render
from ArcaeaChartRender.utils import fetch_song_info
render = Render(
aff_path='./songs/panicbounceattack/2.aff',
cover_path='./songs/panicbounceattacki/base.jpg',
song=fetch_song_info('./songs/songlist', 'panicbounceattack'),
difficulty=2,
constant=7.0,
)
render.show()
render.save('panicbounceattack_2.png')
In some cases, you may not be conscious of creating a songlist
(e.g. fan-made chart), then you can use the Song
model instead of the fetch_song_info()
function.
from ArcaeaChartRender.render import Render
from ArcaeaChartRender.model import Song
my_song = Song(
**{
"id": "panicbounceattack",
"idx": 0,
"title_localized": {
"en": "PANIC! BOUNCE!! ATTACK!!!"
},
"artist": "3R2 feat. ptar124",
"bpm": "248",
"bpm_base": 248,
"set": "base",
"purchase": "",
"audioPreview": 94798,
"audioPreviewEnd": 110250,
"side": 0,
"bg": "shiawase2",
"version": "3.12.6",
"date": 1649603401,
"difficulties": [
{
"ratingClass": 2,
"chartDesigner": "Rabi-MisakaChan",
"jacketDesigner": "Misaka12456\naffected by\nYumemochi",
"rating": 10,
"ratingPlus": True
}
]
}
)
render = Render(
aff_path='./songs/panicbounceattack/2.aff',
cover_path='./songs/panicbounceattacki/base.jpg',
song=my_song,
difficulty=2,
constant=7.0,
)
render.show()
render.save('panicbounceattack_2.png')
- The yellow area means that the BPM in that area is not equal to the
bpm_base
of the song.
In addition to rendering charts, you can use the library to do the following things.
A minimal syntax check for individual commands in a chart.
from ArcaeaChartRender.aff.decoder import parse_aff
from ArcaeaChartRender.utils import read_file
chart = parse_aff(read_file('./songs/panicbounceattacki/2.aff'))
for cmd in chart.command_list:
print(cmd.syntax_check(), cmd)
Statistical information such as combo calculation.
See element.py
for more information.
from ArcaeaChartRender.aff.decoder import parse_aff
from ArcaeaChartRender.element import Tap
from ArcaeaChartRender.utils import read_file
chart = parse_aff(read_file('./songs/panicbounceattacki/2.aff'))
print(chart.get_total_combo())
print(chart.get_combo_of(Tap))
print(chart.get_bpm_proportion())
print(chart.get_interval())
...
Compose your Arcaea chart by Python DSL, and easily convert plain text of aff file to dict
or list
.
See aff_parsing.py
for more information.
from ArcaeaChartRender.aff.parsing import command
from ArcaeaChartRender.utils import read_file
content = read_file('./songs/panicbounceattacki/2.aff')
print(command.parse_string(content).as_dict())
print(command.parse_string(content).as_list())
...
- beautify text style (at text area)
- add support for segmented combo count (per bar)
- add support for custom background (when
Song.bg
field is notNone
) - other chart statistics (density, multi-finger, crossed hand, etc.)
BOFXVI - PANIC! BOUNCE! ATTACK!!!
from Arcaea-Infinity/FanmadeCharts under616 SB License
Aff2Preview
from Arcaea-Infinity/Aff2Preview under616 SB License
pyparsing
from pyparsing/pyparsing underMIT License
opencv2
from opencv/opencv-python underMIT License
Pillow
from python-pillow/Pillow underHPND License
This project is licensed under the terms of the 616 SB License
.