<img src="readme_resources/logo.png" alt="logo" width="200" height="200"/>
[![PyPi version](https://badge.fury.io/py/circleguard.svg)](https://pypi.org/project/circleguard/)
# Circlecore ([documentation](https://circleguard.github.io/circlecore/))
Circlecore is a utilities library for osu!. Features include:
* Unstable Rate calculation
* Judgments calculation (classifying all hitobjects into misses, hit300s, hit100s, hit50s, or sliderbreaks)
* Similarity calculation between two replays, for replay stealing detection
* Frametime calculation, for timewarp detection
* Jerky, suspicious movement detection (called Snaps)
Circlecore is used by [Circleguard](https://github.com/circleguard/circleguard), a replay analysis tool.
Circlecore is developed and maintained by:
* [tybug](https://github.com/tybug)
* [samuelhklumpers](https://github.com/samuelhklumpers)
## Installation
Circlecore can be installed from pip:
```bash
pip install circleguard
```
This documentation refers to the project as `circlecore` to differentiate it from our organization [Circleguard](https://github.com/circleguard) and the replay analysis tool [Circleguard](https://github.com/circleguard/circleguard). However, `circlecore` is installed from pypi with the name `circleguard`, and is imported as such in code (`import circleguard`).
## Links
Github: <https://github.com/circleguard/circlecore> <br/>
Documentation: <https://circleguard.github.io/circlecore/> <br/>
Discord: <https://discord.gg/VNnkTjm> <br/>
## Usage
We have a full tutorial and documentation at <https://circleguard.github.io/circlecore/>. If you really want to jump right in, below is a quickstart guide:
```python
from circleguard import *
# replace "key" with your api key
cg = Circleguard("key")
# replay on http://osu.ppy.sh/b/221777 by http://osu.ppy.sh/u/2757689
replay = ReplayMap(221777, 2757689)
print(cg.ur(replay)) # unstable rate
print(cg.frametime(replay)) # average frametime
print(cg.frametimes(replay)) # full frametime list
print(cg.hits(replay)) # where the replay hits hitobjects
print(cg.snaps(replay)) # any jerky/suspicious movement
replay2 = ReplayMap(221777, 4196808)
print(cg.similarity(replay, replay2)) # how similar the replays are
# ReplayMap isn't the only way to represent replays; we can also
# get a beatmap's top 3 plays
map_ = cg.Map(221777, span="1-3")
# or a User's fifteenth and twentieth best plays
user = cg.User(124493, span="15, 20")
# or a local replay
replay3 = ReplayPath("/path/to/local/osr/replay.osr")
# and more. You can find them all at
# https://circleguard.github.io/circlecore/appendix.html#circleguard.loadables.Loadable
# maps and users can be iterated over
for r in map_:
print(cg.ur(r))
```
## Contributing
Join [our discord](https://discord.gg/VNnkTjm) and ask how you can help, or look around for open issues which interest you and tackle those. Pull requests are welcome!
Raw data
{
"_id": null,
"home_page": "https://github.com/circleguard/circlecore",
"name": "circleguard",
"maintainer": "",
"docs_url": null,
"requires_python": "",
"maintainer_email": "",
"keywords": "osu!, python, cheat-detection, replay-stealing, remodding",
"author": "Liam DeVoe",
"author_email": "orionldevoe@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/b9/d3/89d93db0534f719e2d36ae518733a5224da1b8204e9b8bbd9a2d222725e7/circleguard-5.4.1.tar.gz",
"platform": null,
"description": "<img src=\"readme_resources/logo.png\" alt=\"logo\" width=\"200\" height=\"200\"/>\n\n[![PyPi version](https://badge.fury.io/py/circleguard.svg)](https://pypi.org/project/circleguard/)\n\n# Circlecore ([documentation](https://circleguard.github.io/circlecore/))\n\nCirclecore is a utilities library for osu!. Features include:\n\n* Unstable Rate calculation\n* Judgments calculation (classifying all hitobjects into misses, hit300s, hit100s, hit50s, or sliderbreaks)\n* Similarity calculation between two replays, for replay stealing detection\n* Frametime calculation, for timewarp detection\n* Jerky, suspicious movement detection (called Snaps)\n\nCirclecore is used by [Circleguard](https://github.com/circleguard/circleguard), a replay analysis tool.\n\nCirclecore is developed and maintained by:\n\n* [tybug](https://github.com/tybug)\n* [samuelhklumpers](https://github.com/samuelhklumpers)\n\n## Installation\n\nCirclecore can be installed from pip:\n\n```bash\npip install circleguard\n```\n\nThis documentation refers to the project as `circlecore` to differentiate it from our organization [Circleguard](https://github.com/circleguard) and the replay analysis tool [Circleguard](https://github.com/circleguard/circleguard). However, `circlecore` is installed from pypi with the name `circleguard`, and is imported as such in code (`import circleguard`).\n\n## Links\n\nGithub: <https://github.com/circleguard/circlecore> <br/>\nDocumentation: <https://circleguard.github.io/circlecore/> <br/>\nDiscord: <https://discord.gg/VNnkTjm> <br/>\n\n## Usage\n\nWe have a full tutorial and documentation at <https://circleguard.github.io/circlecore/>. If you really want to jump right in, below is a quickstart guide:\n\n```python\nfrom circleguard import *\n\n# replace \"key\" with your api key\ncg = Circleguard(\"key\")\n# replay on http://osu.ppy.sh/b/221777 by http://osu.ppy.sh/u/2757689\nreplay = ReplayMap(221777, 2757689)\n\nprint(cg.ur(replay)) # unstable rate\nprint(cg.frametime(replay)) # average frametime\nprint(cg.frametimes(replay)) # full frametime list\nprint(cg.hits(replay)) # where the replay hits hitobjects\nprint(cg.snaps(replay)) # any jerky/suspicious movement\n\nreplay2 = ReplayMap(221777, 4196808)\nprint(cg.similarity(replay, replay2)) # how similar the replays are\n\n# ReplayMap isn't the only way to represent replays; we can also\n# get a beatmap's top 3 plays\nmap_ = cg.Map(221777, span=\"1-3\")\n# or a User's fifteenth and twentieth best plays\nuser = cg.User(124493, span=\"15, 20\")\n# or a local replay\nreplay3 = ReplayPath(\"/path/to/local/osr/replay.osr\")\n# and more. You can find them all at\n# https://circleguard.github.io/circlecore/appendix.html#circleguard.loadables.Loadable\n\n# maps and users can be iterated over\nfor r in map_:\n print(cg.ur(r))\n```\n\n## Contributing\n\nJoin [our discord](https://discord.gg/VNnkTjm) and ask how you can help, or look around for open issues which interest you and tackle those. Pull requests are welcome!\n",
"bugtrack_url": null,
"license": "",
"summary": "A utilities library for osu!. Provides support for parsing replays from a file or from the api, as well as support for unstable rate, hits, similarity, and frametime calculations.",
"version": "5.4.1",
"project_urls": {
"Download": "https://github.com/circleguard/circlecore/tarball/v5.4.1",
"Homepage": "https://github.com/circleguard/circlecore"
},
"split_keywords": [
"osu!",
" python",
" cheat-detection",
" replay-stealing",
" remodding"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "a57975d665b246563e31631f287b2ba3ca3de5adb9181ff481fa8cd18d86f388",
"md5": "54f5597c7c1d04b25dd2f665cf0fa736",
"sha256": "ffa95c3a35bebf1f7cc6aa26c8c2b7f269eabbcbee1402bd4067e3419846a291"
},
"downloads": -1,
"filename": "circleguard-5.4.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "54f5597c7c1d04b25dd2f665cf0fa736",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 71932,
"upload_time": "2023-08-13T15:35:43",
"upload_time_iso_8601": "2023-08-13T15:35:43.384988Z",
"url": "https://files.pythonhosted.org/packages/a5/79/75d665b246563e31631f287b2ba3ca3de5adb9181ff481fa8cd18d86f388/circleguard-5.4.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b9d389d93db0534f719e2d36ae518733a5224da1b8204e9b8bbd9a2d222725e7",
"md5": "6727844b58152d50a0001524834cc295",
"sha256": "ac29faeec73fa4754c6a6b561d4c3e16a09cb92fb667ce6161ef70ea4c9b5037"
},
"downloads": -1,
"filename": "circleguard-5.4.1.tar.gz",
"has_sig": false,
"md5_digest": "6727844b58152d50a0001524834cc295",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 64990,
"upload_time": "2023-08-13T15:35:45",
"upload_time_iso_8601": "2023-08-13T15:35:45.145947Z",
"url": "https://files.pythonhosted.org/packages/b9/d3/89d93db0534f719e2d36ae518733a5224da1b8204e9b8bbd9a2d222725e7/circleguard-5.4.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-08-13 15:35:45",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "circleguard",
"github_project": "circlecore",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"appveyor": true,
"lcname": "circleguard"
}