{"id":21616024,"url":"https://github.com/9beach/analyze-sgf","last_synced_at":"2025-10-14T22:06:34.547Z","repository":{"id":49546324,"uuid":"332959322","full_name":"9beach/analyze-sgf","owner":"9beach","description":"Analyze SGF files with KataGo Parallel Analysis Engine to produce Reviewed SGF files.","archived":false,"fork":false,"pushed_at":"2023-04-12T10:30:43.000Z","size":14209,"stargazers_count":26,"open_issues_count":2,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-09-24T06:32:21.513Z","etag":null,"topics":["baduk","cli","go","katago","rsgf","sabaki","sgf","weiqi"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/9beach.png","metadata":{"files":{"readme":"README.en-US.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-MIT","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-01-26T03:26:14.000Z","updated_at":"2025-09-03T20:48:14.000Z","dependencies_parsed_at":"2025-04-11T07:46:16.594Z","dependency_job_id":"9370cbca-4e08-433f-b1dd-a941ed09c583","html_url":"https://github.com/9beach/analyze-sgf","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/9beach/analyze-sgf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9beach%2Fanalyze-sgf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9beach%2Fanalyze-sgf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9beach%2Fanalyze-sgf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9beach%2Fanalyze-sgf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/9beach","download_url":"https://codeload.github.com/9beach/analyze-sgf/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9beach%2Fanalyze-sgf/sbom","scorecard":{"id":6405,"data":{"date":"2025-08-11","repo":{"name":"github.com/9beach/analyze-sgf","commit":"7fb7932aa6d3905636be677805a41ff5e2f8f1e1"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.9,"checks":[{"name":"Code-Review","score":0,"reason":"Found 2/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE-MIT:0","Info: FSF or OSI recognized license: MIT License: LICENSE-MIT:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.4.8 not signed: https://api.github.com/repos/9beach/analyze-sgf/releases/99120530","Warn: release artifact v0.4.8 does not have provenance: https://api.github.com/repos/9beach/analyze-sgf/releases/99120530"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":3,"reason":"7 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-gxpj-cx7g-858c","Warn: Project is vulnerable to: GHSA-2j2x-2gpw-g8fm","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-14T13:38:32.115Z","repository_id":49546324,"created_at":"2025-08-14T13:38:32.116Z","updated_at":"2025-08-14T13:38:32.116Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279021745,"owners_count":26087053,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["baduk","cli","go","katago","rsgf","sabaki","sgf","weiqi"],"created_at":"2024-11-24T22:13:24.303Z","updated_at":"2025-10-14T22:06:34.528Z","avatar_url":"https://github.com/9beach.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# analyze-sgf\n\n[![npm version](https://badge.fury.io/js/analyze-sgf.svg)](https://badge.fury.io/js/analyze-sgf)\n\n[한국어](README.md) | English\n\n`analyze-sgf` analyzes [SGF](https://en.wikipedia.org/wiki/Smart_Game_Format)\nand Tygem's GIB format by\n[KataGo Parallel Analysis Engine](https://github.com/lightvector/KataGo/blob/master/docs/Analysis_Engine.md)\nto generate the win rate graphs, label the good and bad moves, propose the\nvariations, and save them as new SGF files.\n\nYou can analyze an SGF/GIB file one by one in real-time by linking\n[Sabaki](https://sabaki.yichuanshen.de/) or\n[Lizzie](https://github.com/featurecat/lizzie) and KataGo. But with\n`analyze-sgf`, you can analyze many SGF/GIB files all at once, and save the\nKataGo reviewed SGF files automatically. If you open these with Sabaki, you\ncan analyze them with the help of the overall win rate, good and bad move\nlabels, and proposed variations.\n\n`analyze-sgf` also gives you a way to specify a very large number of visits\nand let KataGo analyze several hours, then save and recycle the\nKataGo analysis data (not reviewed SGF). This provides a whole new level of\ndepth compared to using KataGo in real-time.\n\n## Installation\n\nYou can download the executable binaries from [analyze-sgf releases](https://github.com/9beach/analyze-sgf/releases). To install `analyze-sgf` from source code, please follow the steps below.\n\nFirst install [Node.js](https://nodejs.org/) and\n[KataGo](https://github.com/lightvector/KataGo/releases), then install\n`analyze-sgf`. In Mac or Linux, run the following from the terminal.\n\n```console\nnpm install -g analyze-sgf\n```\n\nIn Microsoft Windows, run the following from the `Command Prompt` or\n`PowerShell`.\n\n```console\nC:\\Users\\hcho\u003e npm install -g analyze-sgf\n```\n\nThe upgrade command is the same as the install command.\n\n## Usage\n\nThe first time you run `analyze-sgf`, it generates a `.analyze-sgf.yml` file\nin your home directory and prints out the usage as follows:\n\n```console\n$ analyze-sgf\ngenerated: /Users/hcho/.analyze-sgf.yml\nPlease specify SGF/GIB files.\nUsage: analyze-sgf [-a=OPTS] [-g=OPTS] [-k=OPTS] [-s] [-f] FILE ...\n\nOption:\n  -a, --analysis=OPTS     Options for KataGo Parallel Analysis Engine query\n  -g, --sgf=OPTS          Options for making reviewed SGF files\n  -k, --katago=OPTS       Options for path and arguments of KataGo\n  -r, --revisit=N         For variation cases, Analyze again with maxVisits N\n  -s                      Save KataGo analysis as JSON files\n  -f                      Analyze by KataGo JSON files\n  -h, --help              Display this help and exit\n\nExamples:\n  analyze-sgf baduk-1.sgf baduk-2.gib\n  analyze-sgf 'https://www.cyberoro.com/gibo_new/giboviewer/......'\n  analyze-sgf -a 'maxVisits:16400,analyzeTurns:[197,198]' baduk.sgf\n  analyze-sgf -f baduk.json\n  analyze-sgf -g 'maxVariationsForEachMove:15' -r 20000 baduk.sgf\n\nEdit ~/.analyze-sgf.yml for default options\nReport analyze-sgf bugs to \u003chttps://github.com/9beach/analyze-sgf/issues\u003e\nanalyze-sgf home page: \u003chttps://github.com/9beach/analyze-sgf/\u003e\n\n```\n\nIn Microsoft Windows, it should be run with `analyze-sgf.cmd` rather than\n`analyze-sgf`, but for convenience, we'll call it `analyze-sgf`. Now let's\nlook at how to use them one by one.\n\nTo run `analyze-sgf`, you need to set the KataGo path in the\n`.analyze-sgf.yml` file in your home directory. The contents of the\n`.analyze-sgf.yml` file is as follows. Among these, you need to modify the two\nvalues \"KataGo path here\" and \"KataGo arguments here\" to suit your installed\nKataGo. Please refer to the example.\n\n```yml\n# Please visit \u003chttps://github.com/9beach/analyze-sgf\u003e.\n#\n# Options for path and arguments of KataGo.\nkatago:\n  # e.g., \"C:\\\\Users\\\\hcho\\\\KataGo\\\\katago.exe\"\n  path: 'KataGo path here'\n  # e.g., \"analysis -model C:\\\\Users\\\\hcho\\\\KataGo\\\\katago-best-network.bin.gz -config C:\\\\Users\\\\hcho\\\\KataGo\\\\analysis_example.cfg\"\n  arguments: 'KataGo arguments here'\n\n# Options for KataGo Parallel Analysis Engine query.\n#\n# \u003chttps://github.com/lightvector/KataGo/blob/master/docs/Analysis_Engine.md\u003e.\nanalysis:\n  # e.g., \"korean\", \"tromp-taylor\", \"chinese\", ...\n  rules: 'tromp-taylor'\n  # If input SGF/GIB has no komi field (KM), then uses below.\n  komi: 7.5\n  boardXSize: 19\n  boardYSize: 19\n  # Maximum number of root visits.\n  maxVisits: 1600\n\n# Options for making reviewed SGF files.\nsgf:\n  # SGF can put good/bad/hotspot labels on moves for coloring game tree.\n  # ......\n```\n\nNow, run `analyze-sgf` with SGF/GIB files, for example, `shin-vs-lian.sgf`,\nthe simple analysis result will be printed out, and a file\n`shin-vs-lian-analized.sgf` is generated.\n\n```console\n$ analyze-sgf shin-vs-lian.sgf\n■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 100% (208/208, 6.4k visits) | ETA: 0s (20m52s)\ngenerated: shin-vs-lian-analyzed.sgf\n# Analyze-SGF Report\n\n13th Chunlan Cup, semi-final, Komi 7.5, B+R, 2021-01-20\n\nShin Jinseo (Black)\n* KataGo top choices (54.81%, 57/104)\n* Less than 2% win rate drops (75.00%, 78/104)\n* Less than 5% win rate drops (88.46%, 92/104)\n* More than 5% win rate drops (11.54%, 12/104): #39 ⇣6.32%, #69 ⇣7.03%, #105 ⇣18.34%, #109 ⇣18.41%, #121 ⇣6.67%, #133 ⇣5.92%, #141 ⇣20.10%, #161 ⇣15.17%, #165 ⇣5.78%, #173 ⇣17.48%, #179 ⇣15.75%, #183 ⇣13.84%\n* More than 20% win rate drops (0.96%, 1/104): #141 ⇣20.10%\n* Top 10 win rate drops: #141 ⇣20.10%, #109 ⇣18.41%, #105 ⇣18.34%, #173 ⇣17.48%, #179 ⇣15.75%, #161 ⇣15.17%, #183 ⇣13.84%, #69 ⇣7.03%, #121 ⇣6.67%, #39 ⇣6.32%\n* Top 10 score drops: #141 ⇣35.84, #143 ⇣10.06, #173 ⇣4.93, #171 ⇣3.14, #145 ⇣1.49, #105 ⇣1.43, #179 ⇣1.25, #109 ⇣1.20, #165 ⇣1.14, #69 ⇣0.88\n\nLian Xiao (White)\n* KataGo top choices (52.43%, 54/103)\n* Less than 2% win rate drops (74.76%, 77/103)\n* Less than 5% win rate drops (81.55%, 84/103)\n* More than 5% win rate drops (18.45%, 19/103): #64 ⇣11.43%, #96 ⇣5.20%, #102 ⇣7.88%, #104 ⇣8.71%, #106 ⇣9.51%, #108 ⇣6.93%, #114 ⇣9.05%, #116 ⇣11.45%, #120 ⇣8.97%, #138 ⇣7.90%, #146 ⇣15.73%, #150 ⇣9.34%, #166 ⇣5.62%, #172 ⇣14.41%, #174 ⇣54.39%, #176 ⇣20.59%, #180 ⇣14.40%, #184 ⇣19.62%, #190 ⇣6.76%\n* More than 20% win rate drops (1.94%, 2/103): #174 ⇣54.39%, #176 ⇣20.59%\n* Top 10 win rate drops: #174 ⇣54.39%, #176 ⇣20.59%, #184 ⇣19.62%, #146 ⇣15.73%, #172 ⇣14.41%, #180 ⇣14.40%, #116 ⇣11.45%, #64 ⇣11.43%, #106 ⇣9.51%, #150 ⇣9.34%\n* Top 10 score drops: #146 ⇣52.72, #174 ⇣7.14, #172 ⇣4.61, #176 ⇣1.93, #116 ⇣1.38, #64 ⇣1.25, #140 ⇣1.21, #186 ⇣1.13, #166 ⇣1.13, #102 ⇣0.99\n\nAnalyzed by KataGo Parallel Analysis Engine (6415 max visits).\n```\n\nCyber ORO's [기보 감상](https://www.cyberoro.com/bcast/gibo.oro?Tdiv=B) and\nTygem's [최신기보](http://news.tygem.com/news/tnews/gibo.asp) provides SGFs of\nalmost all Korean Go professionals. `analyze-sgf` automatically downloads and\nanalyzes the SGFs from the URLs of the matches.\n\n```console\n$ analyze-sgf 'https://www.cyberoro.com/gibo_new/giboviewer/......'\ndownloaded: [제22회 농심배 12국, 2021-02-24] 이치리키 료 vs 신진서 (135수 흑불계승).sgf\n■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 100% (136/136, 2k visits) | ETA: 0s (6m23s)\ngenerated: [제22회 농심배 12국, 2021-02-24] 이치리키 료 vs 신진서 (135수 흑불계승)-analyzed.sgf\n```\n\n```console\n$ analyze-sgf 'http://service.tygem.com/service/gibo2/?seq=......'\ndownloaded: [제22회 농심배 12국, 2021-02-24] 이치리키 료 vs 신진서 (135수 흑불계승).sgf\n■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 100% (136/136, 2k visits) | ETA: 0s (6m23s)\ngenerated: [제22회 농심배 12국, 2021-02-24] 이치리키 료 vs 신진서 (135수 흑불계승)-analyzed.sgf\n```\n\nThe screenshot below shows the file opened in Sabaki.\n\n![Sabaki Variations Screenshot](./sabaki-variations.png?raw=true 'Sabaki Variations Screenshot')\n**Exploring a variation with Sabaki**\n\nIf the win rate drops by more than 5%, the node of the game tree turns to a\nred dot, if more than 20%, turns to a red ribbon, and if within 2%, turns to a\ngreen dot. This criterion can be changed by specifying the\n`minWinrateDropForBadMove`, `minWinrateDropForBadHotSpot`, and\n`maxWinrateDropForGoodMove` settings in `.analyze-sgf.yml` file.\n\nThe comment of each move contains information about win rate and score,\nwhether it matches KataGo move suggestions, as well as links to the moves with\nhuge win rate drop, so you can quickly analyze your game.\n\nIf you hover your mouse over a proposed variation in Sabaki, the sequence of\nthe variation is automatically played as shown in the screenshot above.\n\n## Options\n\nThe `.analyze-sgf.yml` file saves all the default settings for `analyze-sgf`.\nYou can either modify the `.analyze-sgf.yml` file to modify the default\nsettings or specify it when running `analyze-sgf`. For example, to adjust\n`maxVisits` of KataGo Parallel Analysis Engine, you need to change the\n`maxVisits` value in the analysis section, which can also be specified at run\ntime, as follows:\n\n```console\nanalyze-sgf -a 'maxVisits:5000' baduk.sgf\n```\n\nThe `maxVisits` value determines how many visits the KataGo Parallel\nAnalysis Engine will do when analyzing a move. The larger it is, the more\naccurate the analysis, but it takes more time. If you have `maxVisits` set\nto 10000, and want to analyze up to 20 variations for 174th and 176th moves,\nrun:\n\n```console\nanalyze-sgf -a 'maxVisits:10000,analyzeTurns:[173,175]' -g 'maxVariationsForEachMove:20,showBadVariations:true' baduk.sgf\n```\n\nThe `-a` and `-g` options stand for `analysis` and `sgf`, respectively.\nDue to zero-based numbering of KataGo, we need to request 173 to analyze the\n174th move.\n\nIf `analyzeTurns` is specified, only the variations of specified moves are\nsaved. If `analyzeTurns` is not specified, all the variations of the moves\nwhose win rate drops greater than `minWinrateDropForVariations` are saved.\n\nKomi is automatically set using the information in the SGF/GIB file even if\nthe `-a 'komi:6.5'` option is not specified.\n\nAnything with quotes in the `.analyze-sgf.yml` setting must be quoted at\nruntime. That is, you should run it like this:\n\n```console\nanalyze-sgf -a 'rules:\"korean\"' baduk.sgf\n```\n\n## Advanced Options\n\n### Saving analysis data with `-s`\n\nIt takes quite a long time to analyze with KataGo. However, in the reviewed\nSGF, not all pieces of information of KataGo analysis are stored. It would be\nvery frustrating if you had to take the time to analyze it again with\ndifferent settings (e.g., `minWinrateDropForVariations`,\n`minWinrateDropForBadMove`). So `analyze-sgf` can save and recycle the KataGo\nanalysis data with the `-s` option.\n\n```console\n$ analyze-sgf -s -a 'maxVisits:30000' baduk.sgf\n■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 100% (136/136, 30k visits) | ETA: 0s (1h15m43s)\ngenerated: baduk.json\ngenerated: baduk-analyzed.sgf\n```\n\nIf you specify a large number in `maxVisits` as above, it takes a long time\nto analyze a lot. And the result is saved as `baduk.json` by `-s` option.\nIf you run it as below, the analysis is finished at the same time as it is\nexecuted using `baduk.json`, not KataGo.\n\n```console\nanalyze-sgf -a 'analyzeTurns:[170,171]' -g 'maxVariationsForEachMove:20,showBadVariations:true' -f baduk.json\n```\n\nNow you can see up to 20 variations of the 171th and 172th moves including\nthe variations of bad win rates. Please note that `-a` option values such\nas `maxVisits`, `komi` other than `analyzeTurns` are ignored with `-f` option.\n\nIf you can wait a few hours, give it a very large number of visits and save\nthe analysis data with `-s -a 'maxVisits:100000'`. This provides a whole new\nlevel of depth compared to using KataGo in real-time.\n\nIf you want to see all the variations that exist in your KataGo analysis data,\ndo the following:\n\n```console\nanalyze-sgf -g 'minWinrateDropForVariations:-100,showBadVariations:true,maxVariationsForEachMove:100 -f baduk.json'\n```\n\n### Revisiting with `--revisit`\n\nWhile specifying a large number in `maxVisits` can increase the accuracy of\nyour analysis, it also takes a lot of time to get finished even when a small\nnumber of moves are interesting. `--revisit` option allows you to analyze a\ngame with two different visits based on win rates drops of the moves.\n`minWinrateDropForVariations` is the criterion. For example, if you run the\nfollowing, you can analyze the variations of the moves whose win rate drops\ngreater than 5% with 50000 visits and the variations of the moves whose win\nrate drops less than 5% with 1000 visits.\n\n```console\n$ analyze-sgf -a 'maxVisits:1000' -g 'minWinrateDropForVariations:5' --revisit 50000 baduk.sgf\n■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 100% (136/136, 1k visits) | ETA: 0s (3m43s)\n■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ 100% (18/18, 50k visits) | ETA: 0s (19m23s)\n```\n\nPlease note that if the win rate of the 60th move drops by 6%, then\nthe 59th move will be analyzed again with 50000 visits because that way\nwe can explore the variations of the 60th move more broadly.\n\nWhen you run `analyze-sgf --revisit 50000 baduk.sgf`, `analyze-sgf` refers to\n`maxVisits` and `minWinrateDropForVariations` in `.analyze-sgf.yml`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F9beach%2Fanalyze-sgf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F9beach%2Fanalyze-sgf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F9beach%2Fanalyze-sgf/lists"}