Downloads · 30 days
5K
80% of all-time downloads
CaptchaKraken/CaptchaKraken-v1.2-GGUF
CaptchaKraken-v1.2-GGUF is a image-text-to-text model from CaptchaKraken. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for gguf. The card lists the license as lgpl-3.0.
A standalone captcha-solving model for Ollama and llama.cpp: the CaptchaKraken-Lora-v1.2 adapter merged into Qwen/Qwen3.5-9B and converted to GGUF. No vLLM, no adapter to wire up, and it runs on CPU if you have no GPU.
Downloads · 30 days
5K
80% of all-time downloads
All-time downloads
6.3K
Public
Repo size
67.1 GB
Likes
5
Trending 2
Click a slice to open those files.
.gguf34 GB · 100%
From the Hugging Face model README
A standalone captcha-solving model for Ollama and llama.cpp: the
CaptchaKraken-Lora-v1.2
adapter merged into Qwen/Qwen3.5-9B and converted to GGUF. No vLLM, no
adapter to wire up, and it runs on CPU if you have no GPU.
Same weights as Sunlight and Twilight — a different container, and a different set of quantisations.
| File | Precision | Size | Comparable to |
|---|---|---|---|
CaptchaKraken-v1.2-Q4_K_M.gguf | 4-bit | 5.6 GB | Sunlight |
CaptchaKraken-v1.2-Q8_0.gguf | 8-bit | 9.5 GB | Twilight |
CaptchaKraken-v1.2-F16.gguf | full | 17.9 GB | the unquantised merge |
mmproj-F16.gguf | full | 918 MB | required by all three |
mmproj-F16.gguf is the vision half of the model — the part that reads the
puzzle. A runtime given only the weights loads a text-only model, and it does
not error: it answers every puzzle without having seen the image. Ollama
picks the projector up automatically from this repo; if you import by hand, name
it in the Modelfile.
ollama show <name> lists vision under Capabilities when it was picked up.
It stays full precision in every build on purpose. Only the language-model weights are quantised — the task is reading a small picture accurately, and quantising the half that does the reading costs far more than it saves.
OLLAMA_CONTEXT_LENGTH=16384 ollama serve
ollama run hf.co/CaptchaKraken/CaptchaKraken-v1.2-GGUF:Q4_K_M
Swap the tag for :Q8_0 or :F16.
⚠️ Raise the context length. Ollama defaults to 4k tokens on cards under 24 GB. An animated challenge arrives as several stills in one request and does not fit in 4k — the symptom is that still puzzles work and animated ones fail. 16k is enough.
llama-server -m CaptchaKraken-v1.2-Q8_0.gguf --mmproj mmproj-F16.gguf \
-ngl 99 -c 16384 --port 8000
pip install "captchakraken>=2.5.0" # or: npm install captchakraken@^2.5.0
export VLLM_BASE_URL=http://localhost:11434/v1 # 8000 for llama-server
export CAPTCHA_KRAKEN_API_KEY=ollama
export CAPTCHA_LORA_NAME=hf.co/CaptchaKraken/CaptchaKraken-v1.2-GGUF:Q4_K_M
export CAPTCHA_LORA_ADAPTER=CaptchaKraken/CaptchaKraken-v1.2-GGUF
Both names matter, and they are different things. CAPTCHA_LORA_NAME is
what goes on the wire, so it must match what ollama list shows.
CAPTCHA_LORA_ADAPTER is what the client looks up to decide which prompts to
send and what resolution to send the image at — both are properties of these
weights, and neither can be read off an Ollama model name.
prompts.json in this repo carries
them plus the puzzle-type → template mapping. A mismatched prompt does not
error, it collapses accuracy.reasoning and content comes
back empty, on every puzzle, with no error. If you convert your own GGUF
from the safetensors builds, the upstream template defaults thinking on:
send reasoning_effort: "none" on Ollama, or
chat_template_kwargs: {"enable_thinking": false} elsewhere.CAPTCHA_LORA_ADAPTER is
set.Coordinates come back normalized 0–1000, top-left (0,0), bottom-right
(1000,1000) — not pixels. Grid screenshots must be sent with cell numbers
drawn on them; the model reads those labels and was never trained to invent a
numbering. The shipped client does all of this for you.
44 puzzle types across 10 vendors, and it is the first generation to handle animated challenges and typed text captchas at all.
| v1.1 | v1.2 | |
|---|---|---|
| Vendors | 2 | 10 — adds GeeTest, Yidun, BotDetect, MTCaptcha, Yandex, Tencent, Lemin, Prosopo |
| Animated / video challenges | ✗ | ✓ |
| Typed text captchas | ✗ | ✓ |
| Prompt generation | 1 | 2 |
Scored with the project's soft-tolerance grader on the full 1458-sample held-out real eval — every hand-labelled real capture we hold, none of it trained on. Grid puzzles are exact tile-set match with per-error decay; click/drag receive partial credit by normalized distance, so these are graded scores, not "percent solved".
| Vendor | Puzzle types | Held-out samples | Score |
|---|---|---|---|
| reCAPTCHA | 2 | 629 | 0.600 |
| GeeTest | 7 | 172 | 0.780 |
| NetEase Yidun | 3 | 37 | 0.775 |
| BotDetect | 1 | 28 | 0.929 |
| Tencent | 1 | 11 | 0.829 |
| Prosopo | 1 | 11 | 0.727 |
| Yandex | 1 | 11 | 0.364 |
| Lemin | 1 | 10 | 0.874 |
| MTCaptcha | 1 | 10 | 0.900 |
| All 10 vendors | 44 | 1458 | 0.6155 |
Those figures are the unquantised adapter's, and the GGUF builds do not match them. Driven through the shipped solver over the same held-out captures, the GGUF builds land about 5 points below the same weights served with vLLM. The loss is concentrated in grid and path puzzles — the ones that turn on reading a small label or a precise coordinate — while drag and animated families are unchanged or slightly better.
Q4_K_M costs almost nothing over Q8_0 — under a point separates them, far less than the 4 GB. Take Q4_K_M unless you have the memory to spare.
The gap is the format, not the bit width: 4-bit and 8-bit land within a point of each other while both sit ~5 points under vLLM, and serving at a smaller pixel budget does not recover it. If you want the strongest open weights and you can run vLLM, take Twilight or the adapter instead.
LGPL-3.0-only — see LICENSE. Use, modify and redistribute
these weights, including in commercial and hosted services. If you distribute a
modified version, keep the licence and copyright notices and make your changes
available under LGPLv3.