chessvision ♟️
A fast, lightweight chess board and piece recognition toolkit.
Install
# With uv (recommended)
uv tool install chessvision
# With pipx
pipx install chessvision
# As a library
uv add chessvision
# or
pip install chessvision
Usage
CLI
# Predict chess positions from a board, screenshot, or book page
chessvision board chessboard.png
# Predict directly from clipboard (screenshot or copied image)
chessvision board
# Predict chess positions from a PDF document
chessvision pdf document.pdf
# Predict a single square image
chessvision square square.png
Python API
from chessvision import (
BoardDetector,
BoardPredictor,
Orientation,
PDFPredictor,
PieceClassifier,
Turn,
)
# 1. Full Board Recognition
predictor = BoardPredictor()
prediction = predictor.predict(
"chessboard.png", orientation=Orientation.AUTO, turn=Turn.AUTO, castling="auto"
)
print(prediction.render_board)
print(f"FEN: {prediction.fen}")
print(f"Confidence: {prediction.confidence:.2%}")
print(f"Valid: {prediction.is_valid}")
if not prediction.is_valid:
print(f"Errors: {prediction.validation_errors}")
print(f"Lichess URL: {prediction.lichess_url}")
print(f"Chess.com URL: {prediction.chesscom_url}")
# Access the chess.Board object directly
board = prediction.board
# 2. Multi-Board Detection
detector = BoardDetector()
boards = detector.detect("page.png") # Returns list of cropped PIL Images
for board in boards:
prediction = predictor.predict(board)
print(prediction.fen)
# 3. Multi-Page PDF Prediction
pdf_predictor = PDFPredictor()
for result in pdf_predictor.predict("document.pdf"):
print(f"{result.label}: {result.prediction.fen}")
# 4. Single Square Classification
classifier = PieceClassifier()
square_prediction = classifier.predict_square("square.png")
print(f"{square_prediction.name} [{square_prediction.confidence:.2%}]")
# 5. Batch Squares Classification
batch_predictions = classifier.predict_squares(["e4.png", "e5.png"])
for prediction in batch_predictions:
print(f"{prediction.name} [{prediction.confidence:.2%}]")
CLI Subcommands
chessvision board
| Flag | Short | Default | Description |
|---|---|---|---|
--orientation |
-o |
auto |
Board perspective (auto, white, or black). |
--turn |
-t |
auto |
Side to move (auto, white or black). |
--castling |
-c |
auto |
Castling availability (see castling options). |
--open |
False |
Open position directly in analysis board. | |
--site |
-s |
lichess |
Analysis platform (chess.com or lichess). |
Castling Options
| Value | Description |
|---|---|
auto |
Automatically infer castling (default) |
- |
No castling for both sides |
[KQkq] |
Specific castling rights (e.g. KQkq, KQ, Qk) |
# Predict from clipboard (screenshot or copied image)
chessvision board
# Specify board perspective explicitly
chessvision board chessboard.png --orientation black
chessvision board chessboard.png -o white
# Specify castling availability explicitly
chessvision board chessboard.png --castling KQkq
chessvision board chessboard.png -c KQ
# Specify side to move explicitly
chessvision board chessboard.png --turn black
chessvision board chessboard.png -t white
# Specify analysis platform explicitly
chessvision board chessboard.png --open --site chess.com
chessvision board chessboard.png --open -s lichess
chessvision pdf
| Flag | Short | Default | Description |
|---|---|---|---|
--output |
-o |
None |
Path to output PGN file. |
# Predict chess positions from a PDF document
chessvision pdf document.pdf
# Export detected positions to a PGN file
chessvision pdf document.pdf --output positions.pgn
chessvision pdf document.pdf -o positions.pgn
chessvision square
# Predict piece on a square image
chessvision square square.png
Model & Cache Management
chessvision automatically downloads the pre-trained ONNX piece classifier (chess_piece_classifier.onnx) from Hugging Face on its first run and caches it locally:
Default File Paths
| OS | Cache Path |
|---|---|
| Linux | ~/.cache/chessvision/chess_piece_classifier.onnx |
| macOS | ~/Library/Caches/chessvision/chess_piece_classifier.onnx |
| Windows | %LOCALAPPDATA%\chessvision\Cache\chess_piece_classifier.onnx |
Attributions
Training assets were extracted, and preprocessed from Lichess open-source piece sets and board themes (see their COPYING.md for individual asset licenses).
License
This project is licensed under the MIT License.
Metadata
Release files for chessvision 0.10.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| chessvision-0.10.0.tar.gz | 11.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| chessvision-0.10.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 27.6 kB
Release files / chessvision-0.10.0.tar.gz
| Download URL | chessvision-0.10.0.tar.gz |
|---|---|
| Size | 11.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ea54c47918d46e7a490b4bf8c0a5e99020beaa35f9bbe88f3d79fd88f5681dfc
|
|
BLAKE2b-256 checksum How to use checksums |
30535b53ab816014497e0e68542ed72ada4196e3956042c4ba5f75277e236341
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / chessvision-0.10.0-py3-none-any.whl
| Download URL | chessvision-0.10.0-py3-none-any.whl |
|---|---|
| Size | 16.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9db6969dbabc408a061ff5734480713914566e834858281d7c2f3e97a7f84098
|
|
BLAKE2b-256 checksum How to use checksums |
5cdd9a372d49ca4495fbda19d6fcbbda6bafa9c0f93cc932f048317198db2ff0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|