Hi there! I'm Charlotte, a journalist with The Steambird~
Art credit: Kuromitsuri Tomato
Charlotte is a Genshin Impact utility that losslessly decrypts .usm cutscene files into playable .mkv videos.
- Supports EN, CN, JP, KR audio tracks
- Supports subtitles in 15 languages
- Optional VapourSynth pipeline for post-processing quality improvements
All known cutscenes from versions 1.0 through 6.4 can be decrypted.
If you have missing keys, pull requests are welcome.
Who else would archive Teyvat's cutscenes but its best journalist?
This project is heavily inspired by GI-cutscenes. Charlotte rebuilds the workflow at a higher level and aims to add extras over time, including VapourSynth processing and a GUI.
- Decrypt
.usminto.ivfvideo and.hcaaudio - Convert
.srtsubtitles into styled.ass - Match official cutscene subtitle style and fonts
- Convert
.hcaaudio to.flacfor archival - Mux tracks into
.mkv - Add full VapourSynth processing workflow
- Add GUI
VapourSynth filter scripts take a lot of time to write to ensure quality, hence they will be slowly added over time. If you have encoding knowledge, contributions are welcome!
- Download
charlotte.exefrom the latest release. - Put
ffmpeg.exeandmkvmerge.exein the same directory ascharlotte.exe. - Clone AnimeGameData and copy its
Subtitlefolder besidecharlotte.exe. - Locate
.usmfiles at:[Game Directory]\Genshin Impact game\GenshinImpact_Data\StreamingAssets\VideoAssets\StandaloneWindows64
Note: availability of older cutscenes depends on your local game files and resource cleanup history.
charlotte demux [PATH_TO_USM_FILE_OR_DIR] [OPTIONS]charlotte demux C:\Users\Mint\Desktop\charlotte\USM\Cs_EQHDJ005_HaiDengJie_Boy.usmThis decrypts the cutscene and writes:
output/Cs_EQHDJ005_HaiDengJie_Boy/Cs_EQHDJ005_HaiDengJie_Boy.mkv
| Type | Flag | Alias | Description |
|---|---|---|---|
| Argument | PATH_TO_USM_FILE_OR_DIR |
- |
Path to one .usm file or a directory containing .usm files. |
| Option | --output [DIR] |
-o |
Output directory (default: output). |
| Option | --no-cleanup |
-nc |
Keep intermediate files (.ivf, .hca, .ass, etc.). |
| Option | --vapoursynth |
-vs |
Apply a matching VapourSynth .vpy filter script. |
| Option | --x265-params [PARAMS] |
- |
Pass custom x265 params (colon-separated). |
-
Python
3.14+ -
Required VapourSynth plugins and ML models:
- Place adaptivegrain_rs.dll in
.venv\Lib\site-packages\vapoursynth\plugins\vsrepo - Place ArtCNN_R8F64.onnx in
.venv\Lib\site-packages\vapoursynth\plugins\vsrepo\models - Extract
vsmlrtpart 1 & part 2 to.venv\Lib\site-packages\vapoursynth\plugins\vsrepo. To save space, you may remove all other\modelsincluded withvsmlrtexceptArtCNN_R8F64.onnx.
- Place adaptivegrain_rs.dll in
-
Install the rest of the plugins:
vsrepo install bs dfttest2 akarin mv bm3dcuda_rtc nlm_cuda vszip eedi3m resize2 zsmooth placebo noise vsmlrt_script
-
Copy the game
fontdirectory from:[Game Directory]\Genshin Impact game\GenshinImpact_Data\StreamingAssets\MiHoYoSDKRes\HttpServerResources
uv run pyinstaller charlotte.specIf you enjoyed using Charlotte, your support would mean so much to me. It keeps me motivated to invest more time into the project and keep it alive for as long as I can.
