Qbr, pronounced as Cuber, is a webcam-based 3x3x3 rubik's cube solver written in
Python 3 and OpenCV.
- :rainbow: Accurate color detection
- :mag: Accurate 3x3x3 rubik's cube detection
- :capital_abcd: Multilingual
Isn't the default color detection working out for you? Use the calibrate
mode to let Qbr be familiar with your cube's color scheme. If your room has
proper lighting then this will give you a 99.9% guarantee that your colors will
be detected properly.
Simply follow the on-screen instructions and you're ready to go.
The idea to create this came personally to mind when I started solving rubik's
cubes. There were already so many professional programmers around the world who
created robots that solve a rubik's cube in an ETA of 5 seconds and since 2016
in 1 second (link).
That inspired me to create my own. I started using images only and eventually
switched to webcam.
$ git clone --depth 1 https://github.com/kkoomen/qbr.git $ cd qbr $ python3 -m venv env $ source ./env/bin/activate $ pip3 install -r requirements.txt
Make sure you run
source ./env/bin/activate every time you want to run the
This opens a webcam interface with the following things:
The first 9-sticker display (upper left corner)
This is preview mode. This will update immediately and display how Qbr has
detected the colors.
The second 9-sticker display (upper left corner)
This is the snapshot state. When pressing
SPACE it will create a snapshot in
order to show you what state it has saved. You can press
SPACE as many times
as you'd like if it has been detected wrong.
Amount of sides scanned (bottom left corner)
The bottom left corner shows the amount of sides scanned. This is so you
know if you've scanned in all sides before pressing
Interface language (top right corner)
In the top right corner you can see the current interface language. If you want
to change the interface language you can press
l to cycle through them.
Continue to press
l until you've found the right language.
Default language is set to English.
Available languages are:
Full 2D cube state visualization (bottom right corner)
This visualization represents the whole cube state that is being saved and can
be used to confirm whether the whole cube state has been scanned successfully.
The default color scheme contains the most prominent colors for white, yellow, red,
orange, blue and green. If this can't detect your cube its colors properly then
you can use calibrate mode.
c to go into calibrate mode in order to let Qbr be familiar with your
cube's color scheme. Simply follow the on-screen instructions and you're ready
Note: Your calibrated settings are automatically saved after you've calibrated
your cube successfully. The next time you start Qbr it will automatically load
Tip: If you've scanned wrong, simple go out of calibrate mode by pressing
and go back into calibrate by pressing
Getting the solution
Qbr checks if you have filled in all 6 sides when pressing
ESC. If so, it'll
calculate a solution if you've scanned it correctly.
You should now see a solution (or an error if you did it wrong).
SPACEfor saving the current state
ctoggle calibrate mode
lswitch interface language
You can use
--normalize to also output the solution in a "human-readable" format.
Turn the right side a quarter turn away from you.
Turn the front face 180 degrees.
$ ./qbr.py Starting position: front: green top: white Moves: 20 Solution: U2 R D2 L2 F2 L U2 L F' U L U R2 B2 U' F2 D2 R2 D2 R2
$ ./qbr.py -n Starting position: front: green top: white Moves: 20 Solution: B2 U2 F' R U D' L' B' U L F U F2 R2 F2 D' F2 D R2 D2 1. Turn the back side 180 degrees. 2. Turn the top layer 180 degrees. 3. Turn the front side a quarter turn to the left. 4. Turn the right side a quarter turn away from you. 5. Turn the top layer a quarter turn to the left. 6. Turn the bottom layer a quarter turn to the left. 7. Turn the left side a quarter turn away from you. 8. Turn the back side a quarter turn to the right. 9. Turn the top layer a quarter turn to the left. 10. Turn the left side a quarter turn towards you. 11. Turn the front side a quarter turn to the right. 12. Turn the top layer a quarter turn to the left. 13. Turn the front side 180 degrees. 14. Turn the right side 180 degrees. 15. Turn the front side 180 degrees. 16. Turn the bottom layer a quarter turn to the left. 17. Turn the front side 180 degrees. 18. Turn the bottom layer a quarter turn to the right. 19. Turn the right side 180 degrees. 20. Turn the bottom layer 180 degrees.