A pluggable Python CAPTCHA library supporting image-based text challenges, arithmetic challenges, token-based security, and multiple storage backends.
PyPI · GitHub · Issues · Discussions
pip install InnoCaptchaGenerates an image-based CAPTCHA with configurable text, colors, and dimensions. All images include random distortions and anti-aliasing.
from InnoCaptcha.text import TextCaptcha
# Basic usage
captcha = TextCaptcha()
captcha.create("abs")
print(captcha.verify("abs")) # True
captcha.save(r"captcha.png")
# Custom dimensions and colors
captcha = TextCaptcha(
width=350,
height=100,
color=(255, 137, 6),
background=(15, 14, 23)
)
captcha.create("abc123")
print(captcha.verify("wrong")) # False
captcha.save(r"captcha.jpg")Constructor Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
width |
int or None |
300 |
Image width in pixels. |
height |
int or None |
80 |
Image height in pixels. |
color |
tuple[int, int, int] |
(0, 0, 0) |
Foreground (text) color in RGB. |
background |
tuple[int, int, int] |
(255, 255, 255) |
Background color in RGB. |
create(chars: str) — The text string to render in the CAPTCHA image. Required.
save() Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
path |
str |
'captcha.png' |
Full file path or file name to write the image. |
Notes:
- Uses
secretsfor cryptographically strong randomness.- Rendering can be tuned via module-level constants such as
CHARACTER_OFFSET_DXandWORD_SPACE_PROBABILITY.
Generates arithmetic challenges (addition, subtraction, multiplication, division). All results are integers — the problem regenerates automatically if division would produce a fraction.
from InnoCaptcha.math import MathCaptcha
challenge = MathCaptcha()
print(challenge.get_question()) # e.g., "7 + 3 = ?"
print(challenge.answer) # e.g., 10
print(challenge.verify(10)) # True
print(challenge.verify("10")) # True — string input accepted# Display the installed version
InnoCaptcha --version
# Upgrade to the latest release on PyPI
InnoCaptcha --upgrade| Method / Attribute | Description |
|---|---|
create(chars: str) |
Renders the given string into a distorted CAPTCHA image. |
verify(input: str) |
Returns True if input matches the generated text. |
save(path) |
Writes the image to the specified file path. |
| Method / Attribute | Description |
|---|---|
get_question() -> str |
Returns the challenge string, e.g. "7 + 3 = ?". |
answer: int |
The correct integer answer to the current challenge. |
verify(input) -> bool |
Returns True if input equals the answer. |
- Python 3.9 or later
- Pillow >= 10.0.0
MIT — InnoSoft Company