https://github.com/arunpersaud/cube
Timing analytics for rubrik cube
https://github.com/arunpersaud/cube
cstimer cube rubrik statistics
Last synced: 9 months ago
JSON representation
Timing analytics for rubrik cube
- Host: GitHub
- URL: https://github.com/arunpersaud/cube
- Owner: arunpersaud
- License: gpl-3.0
- Created: 2025-10-01T19:24:13.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2025-10-01T19:28:18.000Z (9 months ago)
- Last Synced: 2025-10-01T21:24:08.681Z (9 months ago)
- Topics: cstimer, cube, rubrik, statistics
- Language: Python
- Homepage:
- Size: 70.3 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://www.gnu.org/licenses/gpl-3.0)
[](https://github.com/astral-sh/ruff)
[](https://github.com/astral-sh/uv)
# Cube
Cube is a Python toolkit for collecting, storing, and visualising Rubik's Cube solve
history. It reads raw [cstimer](https://cstimer.net) JSON exports, writes a parquet
backing store for fast analytics, computes summary statistics, and renders exploratory
matplotlib plots. Entries from the json files are deduplicated.
## Quick start
```bash
uv sync --dev # create the virtualenv and install runtime + pytest
uv run cube add ~/cube/*.txt
uv run cube analyze # summary + latest 15 solves
uv run cube plot
uv run cube plot --axis=solve
uv run cube info
```
The CLI accepts any number of export files and consolidates them into
a single parquet file stored under your user data directory (per
`platformdirs`). Analysis prints a readable summary plus the latest 15
solves with Ao5/Ao12 values, and plots are rendered interactively
(choose `--axis=solve` for stepped x-axis by solve order) with
Ao5/Ao12 overlays. Run `cube info` at any time to print the resolved
dataset path.
## Development
- `uv add ` manages dependencies in `pyproject.toml`
- `uv run pytest` executes the automated test suite
- install [prek](https://prek.j178.dev/) for pre-commit hooks
## Other packages
The cstimer import is based on
[scramble-history](https://github.com/purarue/scramble-history), which
does most of what I wanted (and more), but did not seem to have a
parquet file backend for a single storage.