Contact
GAA is still in an early version, and I'm pretty new to Genshin theorycrafting. I would very much appreciate receiving constructive feedback so that GAA can be a great tool for users. Please let me know of any bugs, weird output, inconvenience, ideas, etc.
If you want to provide feedback without needing a response,
please fill out this short Google form (it only has ONE field for text).
If you want to provide feedback and have a conversation about it,
email me at kokokokomi222@gmail.com
.
However, I cannot guarantee that I'll respond.
I am not looking for any code contributions. For now, this is purely my personal hobby, and I want to keep it that way. However, I may look for help with theorycrafting and translations later.
Credit
To be filled later
Privacy Policy
GAA keeps a log of Enka Network requests. This includes timestamp, UID, and HTTP status code. It will never be shared with any third party; it's only for my pair of eyes to see. The server log is destroyed after 3 days.
There is no client-side tracking of any kind. Some information can be saved on your browser's local storage. Aside from the UID, this data is never sent to the server, and only your device can access it. This data can include:
- UID
- Character information such as level, ascension, talent levels, and constellations.
- Equipment information such as weapon level/ascension/refinement and artifacts.
- Artifact inventory
- Theorycrafting formula
Legal
Genshin Artifact Appraiser is a non-commercial fansite. Genshin Artifact Appraiser is NOT affiliated with miHoYo/HoYoverse/COGNOSPHERE. Genshin Impact and its related rights belong to them.
I reserve all rights regarding this website and its code. If you derive content from the outputs of this website, please give clear credit to this website. If you like to use or adapt the code for your project, please obtain permission by contacting me.
I expressly prohibit training of AI on any data from this site, including the appraiser and theorycrafter outputs. If you are accessing my site using an automated method, you must follow my robots.txt.
Tech
GAA started its life as a CLI Python script written to optimize my Kokomi. Over one year, it ballooned into a hobby project that appraises artifacts by simulating accounts using a build specified with a DSL.
GAA is built in raw HTML, CSS, and JavaScript. Only two tiny JavaScript libraries are used ( day.js (~7KB) for dealing with time and lz-string (~5KB) for data compression ). JSDoc is used to document types. Webpack is used to merge and minify the scripts. Static assets are hosted on Cloudflare. Enka Network is used to retrieve Genshin account information. A Cloudflare worker handles the Enka Network call.
Django is used to run the site locally during development and generate the final HTML from templates and a SQLite database. Automated scripts that update data/images of new characters/weapons/artifact sets/namecards/items are written in Python and primarily rely on genshin-db (for data) and the Genshin Impact Wiki (for images), but Hakush.in is also supported.
As of version 0.5.0, the source code is roughly ~16k lines of Javascript, ~2.5k lines of Python, ~3k lines of HTML templates, ~2.5k lines of CSS, ~3.5k lines of build formulas, ~450KB of JSON data, and ~5MB of test data (sample of random UIDs).
The build formula compiler is also hand-written.
First, a simple regex-based lexer tokenizes the formula.
Then a recursive descent parser generates a parse tree.
After that, semantic analysis passes occur:
adding in built-in variables, declaring/resolving symbols, and doing basic constant folding
(mostly trying to eliminate function calls for things like resist(10-40)
).
Finally, transpiled Javascript is emitted and loaded on each web worker, ready to be used by the simulator.
The compiler takes less than 20ms for any of the existing formulas on my machine.
Another system I'm proud of is the optimizer and the theorycrafter. For a typical scenario, one would have to go through over 1 billion combinations of artifacts to find the best artifacts to equip. But by using Appraiser Value (AV), I narrow it down to ~700 combinations, allowing GAA to simulate thousands of accounts very quickly. The accuracy drops to ~99.0%, but this is good enough to give great results. Initially the theorycrafter took a couple of minutes to run. However, with utilizing web workers for parallel computation, pooling artifact objects, early rejection of horrible artifacts to reduce artifact pool usage, pre-rolling the 4th line, using memory arena to avoid repeated large array allocations, optimizing theorycrafter and optimizer parameters, and reducing the size of data transferred to and from the web workers, the theorycrafter now runs in 1~2 seconds on my machine and ~40 seconds on my very old phone.
The ranker is another computation-heavy system.
It takes in an artifact and computes the distribution of AV for every possible leveling result.
Even when the 4th line is known, there are 16^5 = 1,048,576
possibilities here.
Unlike optimizer and theorycrafter, this is an exact calculation.
Using various optimization tricks, this also became a very quick operation.
The ranker is used to generate potential histograms of under-leveled artifacts,
show leveling recommendation ranks for every artifact in the inventory,
and calculate percentiles for AV/RV/CV.
No LLM-based AI was used to generate any line of code. I found that it slows down my work and also results in worse-quality code and a worse end product for me. More importantly, AI is fundamentally incapable of assisting with thousands of small and large decisions that need to be made while developing. As far as I know, there does not exist a project largely generated with LLM that comes remotely close to the scale and quality of something like GAA. So I really don't get the hype, and people who actually ship substantial software seem to agree. If "vibe coding" really works, why is there no demonstration of such a productive coding session anywhere on the internet? If LLMs give you "10x" productivity, why haven't these people shipped a new program within a couple of months? I only use AI to ask questions to locate the information I need, like as a more sophisticated search engine, and then get the actual information from the official documentation. LLMs do decently well for that purpose.